OX 10문항 + 5지선다형 10문항
open('file.txt', 'w') 코드는 'file.txt' 파일이 존재하지 않으면 새로 생성한다.
'w'(쓰기) 모드는 파일이 없으면 새 파일을 만들고, 이미 있으면 기존 내용을 지운 뒤 새로 씁니다.
with open('file.txt', 'w', encoding='utf-8') as f:
f.write('새 파일 생성')
print('쓰기 완료')
쓰기 완료
파일을 'r'(읽기) 모드로 열 때, 해당 파일이 없으면 빈 파일이 생성된다.
'r' 모드는 기존 파일을 읽는 모드입니다. 파일이 없으면 새로 만들지 않고 FileNotFoundError가 발생합니다.
try:
with open('없는파일.txt', 'r', encoding='utf-8') as f:
print(f.read())
except FileNotFoundError:
print('파일이 없습니다')
파일이 없습니다
'a'(추가) 모드로 파일을 열면 기존 파일의 내용은 삭제되고 새로운 내용으로 덮어써진다.
'a' 모드는 append의 뜻으로, 기존 내용 뒤에 새 내용을 추가합니다. 기존 내용을 삭제하는 것은 'w' 모드입니다.
with open('memo.txt', 'w', encoding='utf-8') as f:
f.write('처음')
with open('memo.txt', 'a', encoding='utf-8') as f:
f.write('추가')
with open('memo.txt', 'r', encoding='utf-8') as f:
print(f.read())
처음추가
with open(...) as f: 구문을 사용하면 파일을 수동으로 f.close() 해줄 필요가 없다.
with 구문은 블록이 끝날 때 파일을 자동으로 닫아 줍니다. 오류가 발생해도 안전하게 자원을 정리할 수 있습니다.
with open('note.txt', 'w', encoding='utf-8') as f:
f.write('안전하게 저장')
print('with 블록 종료')
with 블록 종료
f.readline() 메서드는 파일 전체 내용을 하나의 문자열로 읽어온다.
readline()은 한 줄만 읽습니다. 파일 전체를 하나의 문자열로 읽는 메서드는 read()입니다.
with open('lines.txt', 'w', encoding='utf-8') as f:
f.write('첫째 줄\n둘째 줄')
with open('lines.txt', 'r', encoding='utf-8') as f:
print(f.readline().strip())
첫째 줄
f.readlines() 메서드는 파일의 모든 줄을 요소로 하는 리스트를 반환한다.
readlines()는 각 줄을 문자열 요소로 담은 리스트를 반환합니다. 줄바꿈 문자도 포함될 수 있습니다.
with open('lines.txt', 'w', encoding='utf-8') as f:
f.write('사과\n바나나\n')
with open('lines.txt', 'r', encoding='utf-8') as f:
print(f.readlines())
['사과\n', '바나나\n']
이미지나 동영상 같은 바이너리 파일을 다룰 때는 'wb', 'rb' 같은 모드를 사용해야 한다.
이미지, 음성, 동영상은 텍스트가 아니라 바이트 데이터이므로 rb, wb처럼 b가 붙은 바이너리 모드를 사용합니다.
data = b'ABC'
with open('binary.bin', 'wb') as f:
f.write(data)
with open('binary.bin', 'rb') as f:
print(f.read())
b'ABC'
f.write(123) 처럼 write() 메서드에는 숫자도 직접 인자로 전달할 수 있다.
텍스트 모드의 write()는 문자열을 써야 합니다. 숫자를 저장하려면 str(123)처럼 문자열로 바꿔야 합니다.
with open('number.txt', 'w', encoding='utf-8') as f:
f.write(str(123))
with open('number.txt', 'r', encoding='utf-8') as f:
print(f.read())
123
한글이 포함된 파일을 다룰 때는 encoding='utf-8'과 같이 인코딩을 지정하는 것이 안전하다.
인코딩은 문자와 바이트 사이의 변환 규칙입니다. 한글 파일은 환경 차이로 깨질 수 있으므로 utf-8을 명시하면 안전합니다.
with open('korean.txt', 'w', encoding='utf-8') as f:
f.write('한글 저장')
with open('korean.txt', 'r', encoding='utf-8') as f:
print(f.read())
한글 저장
os.path.exists('file.txt')는 'file.txt' 파일이 존재하면 True를 반환한다.
os.path.exists()는 파일이나 폴더가 실제로 존재하는지 확인하여 True 또는 False를 반환합니다.
import os
with open('file.txt', 'w', encoding='utf-8') as f:
f.write('ok')
print(os.path.exists('file.txt'))
True
다음 중 파일의 내용을 처음부터 다시 쓰면서 기존 내용은 모두 삭제하는 파일 열기 모드는?
w 모드는 write 모드입니다. 파일이 이미 있으면 내용을 모두 비우고 처음부터 다시 씁니다.
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('old')
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('new')
with open('data.txt', 'r', encoding='utf-8') as f:
print(f.read())
new
with open('data.txt', 'r') as f: lines = f.readlines() 실행 후, 변수 lines의 타입은 무엇인가?
readlines()는 파일의 모든 줄을 읽어 리스트로 반환합니다.
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('A\nB\n')
with open('data.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
print(type(lines).__name__)
print(lines)
list
['A\n', 'B\n']
파일을 열 때 발생할 수 있는 FileNotFoundError를 처리하기 위한 가장 적절한 구문은?
파일이 없을 때 프로그램이 중단되지 않도록 try-except로 예외를 처리합니다.
try:
with open('missing.txt', 'r', encoding='utf-8') as f:
print(f.read())
except FileNotFoundError:
print('예외 처리 완료')
예외 처리 완료
리스트 data = ['apple\n', 'banana\n']를 파일에 쓰려고 할 때, 올바른 메서드는?
writelines()는 문자열 리스트를 파일에 순서대로 씁니다. write()는 리스트가 아니라 문자열 하나를 받습니다.
data = ['apple\n', 'banana\n']
with open('fruits.txt', 'w', encoding='utf-8') as f:
f.writelines(data)
with open('fruits.txt', 'r', encoding='utf-8') as f:
print(f.read(), end='')
apple
banana
파일의 특정 위치로 커서를 이동시킬 때 사용하는 메서드는?
seek()는 파일 커서 위치를 이동합니다. tell()은 현재 위치를 알려 줍니다.
with open('abc.txt', 'w', encoding='utf-8') as f:
f.write('abcdef')
with open('abc.txt', 'r', encoding='utf-8') as f:
f.seek(2)
print(f.read())
cdef
다음 파일 열기 모드 중 '읽기'와 '쓰기'가 모두 가능한 모드는?
r+는 기존 파일을 읽기와 쓰기 모두 가능한 상태로 엽니다. 단, 파일이 반드시 존재해야 합니다.
with open('rw.txt', 'w', encoding='utf-8') as f:
f.write('abc')
with open('rw.txt', 'r+', encoding='utf-8') as f:
print(f.read())
f.seek(0)
f.write('XYZ')
with open('rw.txt', 'r', encoding='utf-8') as f:
print(f.read())
abc
XYZ
f = open('test.txt', 'w') 이후 f.write('hello')를 실행했습니다. 파일에 내용이 확실히 저장되도록 보장하는 가장 좋은 방법은?
파일을 닫으면 버퍼에 남아 있던 내용이 저장됩니다. with 구문을 쓰면 자동으로 close가 호출됩니다.
f = open('test.txt', 'w', encoding='utf-8')
f.write('hello')
f.close()
with open('test.txt', 'r', encoding='utf-8') as f:
print(f.read())
hello
with open('a.txt','w') as f: f.write('123') 다음에 with open('a.txt','a') as f: f.write('456')를 실행하면?
첫 번째 코드는 123을 쓰고, 두 번째 코드는 a 모드로 기존 내용 뒤에 456을 추가합니다.
with open('a.txt', 'w', encoding='utf-8') as f:
f.write('123')
with open('a.txt', 'a', encoding='utf-8') as f:
f.write('456')
with open('a.txt', 'r', encoding='utf-8') as f:
print(f.read())
123456
존재하지 않는 파일을 'w' 모드로 열 때 발생하는 일은?
w 모드는 파일이 없으면 새 파일을 만듭니다. 이후 write()를 하지 않으면 빈 파일 상태로 남습니다.
with open('new_empty.txt', 'w', encoding='utf-8') as f:
pass
with open('new_empty.txt', 'r', encoding='utf-8') as f:
content = f.read()
print('길이:', len(content))
길이: 0
encoding 인자의 주된 용도는 무엇인가?
파일은 실제로 바이트로 저장됩니다. encoding은 바이트를 문자로 읽고, 문자를 바이트로 저장하는 규칙입니다.
text = '파이썬'
with open('enc.txt', 'w', encoding='utf-8') as f:
f.write(text)
with open('enc.txt', 'r', encoding='utf-8') as f:
print(f.read())
파이썬