이번 글에서는 python에서 파일을 읽고 쓰는 법에 대해 알아보겠습니다.
파일 열기
파일 읽기/쓰기를 하기 위해선 우선 파일을 열어야 합니다.
파일을 열기 위해서는 아래의 open 함수를 사용합니다.
open(file path, mode='r', buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
보통 간단하게 파일을 읽고 쓸 땐 open 함수 인자 중 file path, mode, encoding 인자를 사용하는 경우가 많습니다.
아래는 open 함수에 대한 샘플 코드입니다.
# open 샘플
f = open("C:/test.txt")
f = open("C:/test.txt", "w")
f = open("C:/test.txt", "wr", encoding="utf-8")
그리고 open 함수를 실행했을 경우 close 함수를 호출하여 파일을 닫아줘야합니다.
# close
f = open("C:/test.txt")
f.close()
mode
파일을 열 때 읽기를 할건지 쓰기를 할건지, 아니면 읽기/쓰기 모두 할건지를 정하려면 mode 인자에 설정된 값에 따라 달라집니다.
읽기 모드에서는 쓰기를 할 수 없고, 쓰기 모드에서는 읽기를 할 수 없습니다.
더 나아가 파일을 열 때 바이너리 모드도 있습니다.
아래 표는 mode에 입력되는 값과 그에 대한 설명입니다.
Character | Meaning |
‘r’ | 읽기 (기본값) |
‘w’ | 쓰기. 존재하는 파일 있으면 새로 생성 |
‘x’ | 파일 생성. 이미 존재하는 파일 있으면 fail |
‘a’ | 쓰기. 존재하는 파일이 있으면 파일에 끝에 추가 |
‘t’ | 텍스트 모드 읽기(기본값) |
‘b’ | 이진(binary) 파일 읽기 |
‘+’ | 업데이트(읽기/쓰기) |
파일 쓰기 - write, writelines
파일에 쓰기를 하기 위해선 write 함수를 사용합니다.
아래 코드를 실행하면 해당 경로에 파일이 생성됩니다.
# write
f = open("C:\\test.txt", "w")
text = """123
가나다
abc"""
f.write(text)
f.close()
아래와 같이 writelines 함수를 사용할 수도 있습니다.
# writelines
f = open("C:\\test.txt", "w")
text = ["123\n", "가나다\n", "abc"]
f.writelines(text)
f.close()
파일 읽기 - readline, readlines, read
파일의 내용을 읽는 방법 중에 readline 함수를 사용하는 방식 입니다.
readline 함수를 사용하면 한 줄씩 읽어옵니다.
# readline
f = open("C:\\test.txt", "r")
while True:
line = f.readline()
if line == '':
break
print(line, end="")
f.close()
readlines 함수를 사용하면 파일 전체를 읽어옵니다. 반환되는 형식은 리스트 입니다.
# readlines
f = open("C:\\test.txt", "r")
lines = f.readlines()
print(lines)
for line in lines:
print(line, end="")
f.close()
read 함수를 사용하면 파일 전체를 읽어옵니다. 반환되는 형식은 문자열입니다.
# read
f = open("C:\\test.txt", "r")
text = f.read()
print(text, end="")
f.close()
with
파일을 열면 항상 파일을 닫아줘야 한다고 했습니다.
실수로 파일을 닫지 않게 되면 다음 open 함수 수행 시 제대로 수행되지 않을 수 있습니다.
이럴 때 open된 파일을 자동으로 close 해주려면 with문과 같이 사용하면 됩니다.
# with
with open("C:\\test.txt", "r") as f:
lines = f.readlines()
print(lines)
for line in lines:
print(line, end="")
encoding
encoding 인자에 아무것도 입력되지 않으면 플랫폼에 의존적(platform-dependent)인 encoding을 사용합니다.
플랫폼에 의존적인 encoding은 locale.getpreferredencoding(False) 함수를 사용해서 알 수 있습니다.
제 PC 환경은 Windows10 인데 cp949로 나오네요.
# encoding
import locale
print(locale.getpreferredencoding(False))
encoding에 입력되는 값은 ANSI, UTF-8, EUC-KR 등이 있으며 파일엔 잘 입력되어 있는데 파이썬에서 읽었을 때 한글 깨진다거나 할 때 이 encoding에 입력되는 값을 변경해보시면 됩니다.
여기도 참고하시길 바랍니다.
이상으로 파일 열기/읽기/쓰기에 대해 알아보았습니다.