[파이썬] open() 함수를 이용한 파일 입출력
![[파이썬] open() 함수를 이용한 파일 입출력](https://img.daleseo.com/cdn-cgi/image/width=1200,format=auto,onerror=redirect/t8DaFrKl.webp)
파이썬에서는 내장 함수인 open()을 이용해서 다른 언어에 비해서 매우 간단하게 파일 입출력 처리를 할 수 있습니다.
파일에 데이터 쓰기
먼저 파일에 데이터를 쓰는 방법에 대해서 알아보겠습니다.
아래 colors 배열에 들어있는 문자열 3개를 colors.dat 파일에 쓰려고 합니다.
colors = ['red', 'yellow', 'blue']
파일을 열 때는 기본적으로 with 문을 통해 open() 내장 함수를 호출하는 것이 권장됩니다.
with 문을 사용하지 않을 경우, 파일 닫기를 스스로 해줘야 해서 불필요하게 코드가 지저분해지기 때문입니다.
open() 내장 함수는 첫번째 인자로는 파일명, 두번째 인자로는 모드를 받습니다.
파일에 데이터를 쓸 때는 w 모드를 사용하고 파일을 열고, 파일 핸들러의 write() 메서드를 사용해서 쓸 데이터를 넘기면 됩니다.
또 다른 방법으로 print() 내장 함수를 사용하되 두번째 인자로 파일 핸들러 넘길 수도 있습니다.
with open('colors.dat', 'w') as file:
for color in colors:
file.write(color + '\n')
# print(color, file=file)
위 코드를 실행하면 colors.dat 파일이 생성되고, 그 파일 안에 다음과 같이 데이터가 쓰여져있음을 확인할 수 있습니다.
red
yellow
blue
여기서 주의할 점은 w 모드를 사용해서 파일에 쓰기를 할 때는 기존에 파일에 있던 데이터는 모두 사라진다는 것입니다.
기존에 데이터를 유지한 체로 데이터를 추가해서 쓰고 싶은 경우에는 a 모드를 사용하면 됩니다.
파일로 부터 데이터 읽기
파일로 부터 데이터를 읽을 때는 r 모드를 사용해서 파일을 열어야 합니다.
파일 핸들러의 read() 함수는 파일의 전체 데이터를 문자열로 리턴합니다.
with open('colors.dat') as file:
print(file.read())
위 코드를 실행하면 다음과 같이 콘솔에 파일의 전체 데이터가 출력될 것입니다.
red
yellow
blue
파일을 줄 단위로 읽어야 할 때는 for 문을 사용해서 파일 핸들러를 루프 돌 수 있습니다.
with open('colors.dat') as file:
for color in file:
print(color, end='')
파일을 줄 단위로 읽은 결과를 바로 배열에 저장하고 싶다면 다음과 같이 splitlines() 메서드를 사용하면 됩니다.
with open('colors.dat') as file:
colors = file.read().splitlines()
print(colors)
['red', 'yellow', 'blue']
파일 인코딩
open() 내장 함수에 encoding 인자를 넘기지 않으면 어떤 인코딩으로 파일을 읽고 쓸까요?
파이썬 3.14까지는 운영체제의 로케일(locale) 설정을 따랐기 때문에, macOS나 리눅스에서는 UTF-8이었지만 한국어 윈도우에서는 CP949였습니다.
그래서 맥에서 잘 돌던 코드가 윈도우에서 한글이 들어간 파일을 읽다가 UnicodeDecodeError를 내는 일이 흔했는데요.
파이썬 3.15부터는 운영체제와 관계없이 UTF-8이 기본 인코딩이 되었습니다(PEP 686).
이제는 encoding 인자를 생략해도 어디서나 같은 결과를 얻을 수 있습니다.
with open('colors.dat', 'w') as file:
print(file.encoding)
utf-8
예전처럼 로케일 인코딩이 필요한 경우에는 encoding='locale'을 명시하면 됩니다.
다만 파이썬 3.14 이하에서도 돌아가야 하는 코드라면 encoding='utf-8'을 직접 넘겨주는 것이 가장 안전합니다.
with open('colors.dat', encoding='utf-8') as file:
print(file.read())
이상으로 파이썬의 open() 내장 함수를 이용해서 파일에 데이터를 쓰거나 읽는 방법에 대해서 간단히 살펴보았습니다.
This work is licensed under CC BY 4.0