이번 포스팅에서는 파이썬으로
(1) 파일을 열고, 데이터를 쓰고, 파일을 닫기
(2) 파일을 열고, 데이터를 읽고, 파일을 닫기
(3) with open(file_name) as file_object: 로 파일 열고, 데이터를 읽고, 자동으로 파일 닫기
(4) open() error 처리 옵션 설정
하는 방법을 소개하겠습니다.
파이썬으로 파일을 열 때 open() 함수를 사용하는데요, 1개의 필수 매개변수와 7개의 선택적 매개변수를 가지며, 파일 객체를 반환합니다. open() 함수의 mode 는 'w', 'r', 'x', 'a', '+', 'b', 't'의 7개 모드가 있으며, 위의 이미지 우측에 있는 표를 참고하시기 바랍니다. ('r' 읽기용으로 파일 열기와 't' 텍스트 모드로 열기가 기본 설정값입니다)
open( file, # 필수 매개변수, 파일의 경로 mode = 'r', # 선택적 매개변수, 'rt' (읽기용, text mode)가 기본값 buffering = -1, # 선택적 매개변수, 버퍼링 정책 (0 : binary mode 시 버퍼링 미수행, # 1: 텍스트 모드 시 개행문자(\n)을 만날 때까지 버퍼링) encoding = None, # 선택적 매개변수, 문자 인코딩 방식 (예: 'utf-8', 'cp949', 'latin' 등) errors = None, # 선택적 매개변수, 텍스트 모드 시 에러 처리 (예: 'ignore' 에러 무시) newline = None, # 선택적 매개변수, 줄바꿈 처리 (None, '\n', '\r', '\r\n') closefd = True, # 선택적 매개변수, False 입력 시 파일 닫더라도 파일 기술자 계속 열어둠 opener = None) # 선택적 매개변수, 파일을 여는 함수를 직저 구현 시 사용
|
(1) 파일을 열고 --> 파일에 데이터를 쓰고 --> 파일을 닫기 |
(1-1) MyFile = open('myfile.txt', 'w') : open() 함수를 사용하여 'myfile.txt' 파일을 'w' 모드 (쓰기용으로 파일 열기, 파일이 존재하지 않으면 새로 생성, 파일이 존재하면 파일 내용을 비움(truncate)) 열어서 MyFile 객체에 할당하고,
(1-2) MyFile.write('data') : MyFile 객체에 'data'를 쓴 후에,
(1-3) MyFile.close() : 파일을 닫습니다. 자원 누수 방지를 위해 마지막에는 꼭 파일을 닫아(close) 주어야 합니다.
참고로, Windows 10 OS의 기본 encoding 은 'cp949' 입니다.
# Open and Write MyFile = open('myfile.txt', 'w') MyFile.write('Open, read, write and close a file using Python') MyFile.close() # encoding = 'cp949' for Windows10 OS MyFile [Out] <_io.TextIOWrapper name='myfile.txt' mode='w' encoding='cp949'>
|
현재 작업 경로에 위에서 만든 'myfile.txt' 파일이 생성이 되어서 존재하는지 확인해보겠습니다.
import os os.listdir(os.getcwd())
|
(2) 파일을 열고 --> 파일의 데이터를 읽고 --> 파일을 닫기 |
(2-1) MyFile = open('myfile.txt', 'r') : 이번에는 (1)번에서 데이터를 써서 만들어놓은 'myfile.txt' 파일을 open() 함수의 'r' 모드 (읽기용으로 파일 열기, default) 로 열어서 MyFile 객체에 할당하고,
(2-2) MyString = MyFile.read() : 'myfile.txt' 파일을 읽어서 MyString 객체에 데이터를 저장하고, print(MyString) 로 인쇄를 한 후,
(2-3) MyFile.close() : 파일을 닫습니다. 자원 누수 방지를 위해 마지막에는 꼭 파일을 닫아(close) 주어야 합니다.
# Open and Read MyFile = open('myfile.txt', 'r') # equivalent to the above #MyFile = open('myfile.txt', 'rt') #MyFile = open('myfile.txt', 't') #MyFile = open('myfile.txt') MyString = MyFile.read() print(MyString)
[Out]: Open, read, write and close a file using Python # close the 'MyFile' file MyFile.close() |
open() 함수의 7개 mode 중에서 'r' 읽기용으로 열기와 't' 텍스트 모드로 열기가 기본값이므로 위의 open('myfile.txt', 'r') 은 open('myfile.txt', 'rt'), open('myfile.txt', 't'), open('myfile.txt') 와 동일한 코드입니다.
(3) with open(파일 이름) as 파일 객체: 를 사용해서 파일 열기 |
with open() as 문을 사용하여 파일을 열면 마지막에 close() 함수를 명시적으로 써주지 않아도 자동으로 파일이 닫힙니다. 위의 (2) 번 코드를 with open(file_name) as file_object: 문으로 바꿔주면 아래와 같습니다.
# Using the with statement the file is automatically closed with open('myfile.txt', 'r') as MyFile: MyString = MyFile.read() print(MyString) # no need for MyFile.close()
|
(4) 텍스트 모드에서 인코딩, 디코딩 에러 발생 시 처리 : errors |
가령, 파일에서 데이터를 읽거나 쓰는 와중에 에러가 발생했을 시 무시하고 싶다면 open('file.txt', 'rw', errors = 'ignore') 라고 설정을 해주면 됩니다.
errors 매개변수 |
error 처리 방법 |
'strict' |
인코딩 에러 발생 시 ValueError 예외 |
'ignore' |
에러 무시 |
'replace' |
대체 기호 삽입 (예: "?") |
'surrogateescape' |
U+DC80~U+DCFF 사이의 유니코드 사용자 자유 영역의 잘못된 바이트를 code points 로 나타냄 |
'xmlcharrefreplace' |
파일을 쓸 때 파일에 기록하려는 텍스트 안의 지정된 인코딩에서 지원되지 않는 문자를 &#NNN; 의 XML 문자 참조로 바꿔서 기록 |
'backslashreplace' |
파일을 쓸 때 현재 인코딩에서 지원되지 않는 문자를 역슬래시(back slash, \)로 시작되는 escape sequence로 바꿔서 기록 |
다음번 포스팅에서는 줄 단위로 텍스트 파일을 읽고 쓰는 방법을 소개하겠습니다.
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. :-)