다른 프로그래밍 언어와 마찬가지로 Python도 파일을 읽고, 쓰고, 접근하기 위한 다양한 내장 함수를 제공합니다. Python이 처리할 수 있는 파일은 크게 두 가지 유형으로 나뉩니다. 바로 일반 텍스트 파일과 바이너리 파일입니다.
텍스트 파일의 경우 각 줄은 특수 문자인 '\n'(EOL 또는 End Of Line이라고도 함)으로 끝납니다. 반면 바이너리 파일에는 줄 끝을 나타내는 문자가 없으며, 내용을 비트 스트림 형태로 변환하여 데이터를 저장합니다.
이 글에서는 텍스트 파일을 다루는 방법에 대해 자세히 알아보겠습니다.
파일 접근 모드(File Access Modes)
Python에서 파일을 열 때는 목적에 맞는 접근 모드를 지정해야 합니다. 주요 모드는 다음과 같습니다.
| 번호 | 모드 및 설명 |
|---|---|
| 1 | r 읽기 전용 모드입니다. 텍스트 파일을 읽기 위해 열며, 해당 파일이 존재하지 않으면 I/O 오류가 발생합니다. |
| 2 | r+ 읽기와 쓰기를 모두 지원하는 모드입니다. 파일이 존재하지 않으면 I/O 오류가 발생합니다. |
| 3 | w 쓰기 전용 모드입니다. 파일이 없으면 새로 생성한 후 작성을 시작하고, 파일이 이미 있으면 기존 내용을 모두 지우고 처음부터 다시 작성합니다. |
| 4 | w+ 쓰기와 읽기를 모두 지원하는 모드입니다. 파일이 없으면 새로 생성하며, 파일이 이미 있으면 기존 데이터를 덮어씁니다. |
| 5 | a 추가(append) 모드입니다. 파일의 맨 끝에 데이터를 이어서 작성합니다. |
| 6 | a+ 추가 및 읽기 모드입니다. 파일 끝에 데이터를 추가하는 동시에 파일 내용을 읽을 수도 있습니다. |
파일에 데이터 쓰기: write()와 writelines()
이제 writelines() 메서드와 write() 메서드를 사용해 파일에 데이터를 작성하는 방법을 살펴보겠습니다.
예제 코드
#빈 파일을 생성하고 여러 줄을 작성
line1 = 'This is first line. \n'
lines = ['This is another line to store into file.\n',
'The Third Line for the file.\n',
'Another line... !@#$%^&*()_+.\n',
'End Line']
#쓰기 모드('w')로 파일 열기
my_file = open('file_read_write.txt', 'w')
my_file.write(line1)
my_file.writelines(lines) #여러 줄 한 번에 쓰기
my_file.close()
print('Writing Complete')
실행 결과
Writing Complete
줄을 작성한 후에는 추가(append) 모드를 사용해 파일 뒤에 새로운 내용을 덧붙일 수 있습니다.
예제 코드
#파일에 줄 추가하기
line1 = '\n\nThis is a new line. This line will be appended. \n'
#추가 모드('a')로 파일 열기
my_file = open('file_read_write.txt', 'a')
my_file.write(line1)
my_file.close()
print('Appending Done')
실행 결과
Appending Done
파일 내용 읽기: read()와 readline()
마지막으로 read() 메서드와 readline() 메서드를 사용해 파일 내용을 읽는 방법을 알아보겠습니다. read(n)처럼 정수 n을 인자로 전달하면 앞에서부터 n개의 문자만 읽어올 수 있습니다. 또한 seek(0)을 호출하면 파일 포인터를 처음 위치로 되돌려 같은 파일을 반복해서 읽을 수 있습니다.
예제 코드
#파일에서 내용 읽기
#읽기 모드('r')로 파일 열기
my_file = open('file_read_write.txt', 'r')
print('Show the full content:')
print(my_file.read())
#첫 두 줄 출력
my_file.seek(0)
print('First two lines:')
print(my_file.readline(), end = '')
print(my_file.readline(), end = '')
#앞의 25자만 출력
my_file.seek(0)
print('\n\nFirst 25 characters:')
print(my_file.read(25), end = '')
my_file.close()
실행 결과
Show the full content: This is first line. This is another line to store into file. The Third Line for the file. Another line... !@#$%^&*()_+. End Line This is a new line. This line will be appended. First two lines: This is first line. This is another line to store into file. First 25 characters: This is first line. This
정리하면, Python에서는 open() 함수에 적절한 접근 모드를 지정하는 것만으로 파일을 손쉽게 읽고 쓸 수 있습니다. 파일 작업이 끝난 후에는 반드시 close() 메서드를 호출해 리소스를 해제하는 습관을 들이는 것이 좋습니다.