이제 얼마 안 남은 학인시 대비입니다. 당장 내일이 시험인데 잘 볼란지 모르겠네요.
이번에는 텍스트 파일을 다루는 텍스트 프로세싱에 대해 알아보겠습니다.
파일 객체
파일 객체는 open 함수에 의해 반환되는 객체를 말합니다. 이를 통해 파이썬에서 텍스트 파일을 읽고 쓸 수 있습니다.
open() 함수를 통해 파일 객체를 생성하고, close() 함수를 통해 파일 객체를 닫을 수 있습니다.
하나의 파일에는 하나의 파일 객체만 접근이 가능하며, 다른 객체가 이용중일 때는 접근이 불가능하거나 기능이 제한됩니다.
f = open('file_path', mode)
f.close()
작업을 종료한 후에는 꼭 close해야 파일을 안전하게 닫을 수 있습니다.
텍스트 파일 처리에는 다양한 모드들이 있습니다.
| mode 인자 | 기능 |
| 'r' | read. 경로의 파일을 호출해 읽음. 파일이 없으면 에러 발생 |
| 'w' | write. 파일에 내용 적음. 파일이 없으면 생성하고 있으면 덮어씀. 중간부턴 작성 불가 |
| 'x' | 파일이 없으면 w 모드, 있으면 에러 발생 |
| 'a' | append. 파일에 내용 적음. 경로에 파일이 있으면 이어서 작성 가능 |
| 'b' | binary. 데이터를 이진법 형태로 표현 및 처리 |
| 't' | text. 기본값. |
| '+' | 읽기 쓰기 모두 가능 |
이런 모드들을 조합해서 사용할 수도 있습니다.
| mode 인자 | 기능 |
| rt, r | 텍스트 모드 & 읽기 전용. 파일이 없으면 에러 발생 |
| wt, w | 텍스트 모드 & 쓰기 전용. 파일이 없으면 생성하고 있으면 덮어씀. |
| at, a | 텍스트 모드 & 추가 전용. 파일이 있으면 이어서 작성 가능. |
| rt+, r+ | 텍스트 모드 & 읽기 모드 & 쓰기 모드. 파일이 없으면 에러 발생. |
| wt+, w+ | 텍스트 모드 & 읽기 모드 & 쓰기 모드. 파일이 없으면 새로 생성. |
파일 쓰기
파일에 무언가를 쓸 때는 'w' 모드와 'a' 모드를 사용할 수 있습니다.
f.write(str) : 문자열 str을 파일에 작성
f.writelines(list) : list의 값을 파일에 작성 (순서대로 공백 없이)
줄바꿈 (Enter) : \n, 탭 (Tab) : \t 을 사용해 구현할 수 있습니다.
f = open('text1.txt', 'w')
f.write('abcd\n')
f.write('1234')
f.close()
abcd
1234
이처럼 파일을 생성한 뒤 성공적으로 문자열을 쓴 것을 알 수 있습니다.
f = open('text1.txt', 'w')
f.write('abcd\n')
f.write('1234')
f.close()
f = open('text1.txt', 'a')
f.write('\n_OlZl\n')
f.write('5678')
f.close()
abcd
1234
_OlZl
5678
'a' 모드를 활용하면 기존 내용에 덧붙일 수 있습니다.
writelines를 활용해 리스트의 요소들을 추가할 수 있습니다.
f = open('text1.txt', 'w')
text_list = ['Hello', 'Nice', 'to', 'meet', 'you.']
f.writelines(text_list)
f.close()
HelloNicetomeetyou.
공백을 넣고 싶으면 join 을 사용하면 됩니다.
f = open('text1.txt', 'w')
text_list = ['Hello', 'Nice', 'to', 'meet', 'you.']
f.writelines(' '.join(text_list))
f.close()
Hello Nice to meet you.
파일 읽기
파일을 읽을 때는 'r' 모드를 사용할 수 있습니다.
f.read() : 파일 내용 전체 읽기 (하나의 문자열로 반환)
f.readline() : \n을 기준으로 line 하나 읽기 (하나의 문자열로 반환, \n은 요소 맨 뒤에 포함)
f.readlines() : 파일 내용 전체 읽기 (\n을 기준으로 분리한 리스트 반환, \n은 요소 맨 뒤에 포함)
Hello Nice to meet you.
How are you today?
I'm fine thank you. And you?
Me too, thanks.
이런 텍스트 파일로 세 함수의 차이를 보겠습니다.
f = open('text1.txt', 'r')
print("=== read() ===")
f.seek(0) # 파일 포인터 처음으로 이동
read_res = f.read()
print(repr(read_res)) # 줄바꿈까지 확인하려면 repr 사용
print("\n=== readline() ===")
f.seek(0)
readline_res = f.readline()
print(repr(readline_res))
print("\n=== readlines() ===")
f.seek(0)
readlines_res = f.readlines()
print(repr(readlines_res))
f.close()
=== read() ===
"Hello Nice to meet you.\nHow are you today?\nI'm fine thank you. And you?\nMe too, thanks."
=== readline() ===
'Hello Nice to meet you.\n'
=== readlines() ===
['Hello Nice to meet you.\n', 'How are you today?\n', "I'm fine thank you. And you?\n", 'Me too, thanks.']
먼저, f.seek()은 이따가 설명하겠지만 커서를 옮기는 작업입니다.
read를 한 번 하면 커서가 맨 뒤로 가기 때문에 계속 앞으로 옮겨져야 파일을 읽을 수가 있는거죠.
repr()은 문자열을 원시적으로 보여주는 역할을 합니다. \n 등의 개행문자까지 그대로 출력해주는 역할을 하죠.
for문을 통해서도 파일을 읽어올 수 있습니다.
for line in f :
code
위와 같은 코드는 한 줄 한 줄 읽어오는 기능을 하기 때문에 readlines로 만든 리스트의 요소들을 뽑아내는 것과 역할이 같습니다.
다만 break를 통해 중간에 빠져나갈 수 있다는 단점이 있죠.
f = open('text1.txt', 'r')
for line in f :
name = line.strip()
print(name)
f.close()
이런 식으로 for문을 통해 텍스트 파일의 줄을 하나하나 받아오고 strip으로 양쪽의 개행 문자를 제거 후 출력하여 readlines와 같은 효과를 낼 수 있습니다.
커서 (Cursor)
앞에서 설명한 것처럼 파일의 커서를 다루는 함수들이 있습니다.
f.tell() : 현재 커서의 위치 반환
f.seek() : 입력한 숫자에 해당하는 위치로 커서 이동
이번에도 아까와 같은 텍스트 파일로 테스트 해보겠습니다.
f = open('text1.txt', 'r')
print(f'시작 위치 : {f.tell()}')
f.seek(10) # 10으로 이동
print(f'현재 위치 : {f.tell()}')
readline_res1 = f.readline()
print(repr(readline_res1))
f.seek(50) # 50으로 이동
print(f'현재 위치 : {f.tell()}')
readline_res2 = f.readline()
print(repr(readline_res2))
f.close()
시작 위치 : 0
현재 위치 : 10
' to meet you.\n'
현재 위치 : 50
'ine thank you. And you?\n'
이를 통해 read를 시작하는 커서의 위치는 0이고, 커서 10의 위치는 ' ', 50의 위치는 'i'인 것을 알 수 있습니다.
with 문
with 문은 파일을 open하고 행동이 끝나는 순간 자동으로 close 하는 구문입니다.
이를 통해 깔끔하게 파일을 다룰 수 있습니다.
file_path = 'text1.txt'
with open(file_path, 'r') as f :
read_res = f.read()
print(read_res)
Hello Nice to meet you.
How are you today?
I'm fine thank you. And you?
Me too, thanks.
위와 같은 형태로 파일을 불러올 수 있습니다.
'프로그래밍 > 파이썬 공부하기' 카테고리의 다른 글
| Python 공부하기 - 11 (CSV) (0) | 2025.09.08 |
|---|---|
| Python 공부하기 - 9 (함수) (0) | 2025.09.07 |
| Python 공부하기 - 8 (지역, 전역변수) (0) | 2025.09.06 |
| Python 공부하기 - 7-2 (Numpy) (1) | 2024.06.30 |
| Python 공부하기 - 7-1 (Numpy) (6) | 2024.06.30 |