파이썬(Python) 내장 모듈인 fileinput을 이용하면 텍스트 파일을 쉽게 수정할 수 있다. 이번 포스팅에서는 fileinput 모듈을 이용하여 텍스트 파일을 수정하는 방법을 알아보자.
fileinput을 이용한 텍스트 파일 수정
먼저 아래 그림과 같은 텍스트 파일(test_01.txt)을 만들어 주었다.
이제 fileinput을 이용하여 텍스트 내용을 수정해 보자.
1) 인코딩 확인
먼저 chardet을 이용하여 텍스트 파일의 인코딩 형식을 추출한다. 왜냐하면 fileinput을 이용할 때 인코딩 에러가 나는 경우 잘못하면 텍스트 전체가 날아갈 수 있기 때문이다.
아래 코드는 텍스트 파일의 20줄까지 읽어서 인코딩 형식을 추측한다.
import chardet
text_file_path = './test_01.txt'
with open(text_file_path, 'rb') as f:
raw_data = b''.join([f.readline() for _ in range(20)])
encoding=chardet.detect(raw_data)['encoding']
print(encoding)
코드를 실행하면 아래와 같이 한국어 전용 인코딩인 EUC-KR인 것을 알 수 있다.
EUC-KR
2) 첫 번째 줄 수정하기 : isfirstline
fileinput의 input을 이용하여 텍스트 파일을 불러온 뒤 inplace 인자를 True로 설정하는 것이 fileinput으로 텍스트 파일을 수정하는 작업의 핵심이다.
이때 isfirstline을 이용하면 텍스트 파일의 첫 번째 줄을 수정할 수 있다. 수정은 print문을 이용한다. inplace=True로 되었다면 print는 출력이 아닌 텍스트 파일에 쓰는 작업을 수행한다.
아래 코드는 텍스트 파일 경로와 인코딩 형식을 지정하여 텍스트 파일을 열고 첫 번째 줄을 수정한다. 이때 인코딩 형식 인자 encoding은 파이썬 3.10 이후에 생긴 것이니 참고하자.
import fileinput
## 첫번째 줄 수정하기
with fileinput.input(text_file_path, inplace=True, encoding=encoding) as f: ## encoding은 3.10부터 추가
for line in f:
if f.isfirstline():
print('반갑습니다.', end='\n')
else:
print(line, end='')
코드를 실행하고 텍스트 파일을 열면 위 그림과 같이 첫 번째 줄이 바뀐 것을 알 수 있다.
3) 특정 단어로 시작하는 줄 내용 바꾸기 : startswith
라인을 한줄한줄 읽으면서 startswith로 특정 단어로 시작하는지에 대해서 알 수 있다. 이를 이용하면 특정 단어로 시작하는 줄의 내용을 바꿀 수 있다.
아래 코드는 '감사'라는 단어로 시작하는 줄의 내용 '사랑합니다.'로 수정한다.
with fileinput.input(text_file_path, inplace=True, encoding=encoding) as f: ## encoding은 3.10부터 추가
for line in f:
if line.startswith('감사'):
print('사랑합니다.', end='\n')
else:
print(line, end='')
4) 특정 단어 모두 바꾸기 : replace
이번엔 replace를 이용하여 텍스트 파일 속 특정 단어를 바꿔보자.
with fileinput.input(text_file_path, inplace=True, encoding=encoding) as f: ## encoding은 3.10부터 추가
for line in f:
if '니다' in line:
print(line.replace('니다', '니당'), end='')
else:
print(line, end='')
'프로그래밍 > Python' 카테고리의 다른 글
파이썬(Python) fnmatch를 이용한 폴더와 파일 탐색 (0) | 2023.04.24 |
---|---|
파이썬(Python) 파일과 폴더(디렉토리) 탐색하기 (feat. glob) (1) | 2023.04.23 |
파이썬(Python) 폴더와 파일 다루기 (feat. os, pathlib) (2) | 2023.04.14 |
파이썬(Python) statistics 모듈을 이용한 통계량 계산하기 (0) | 2023.03.25 |
파이썬(Python) time 모듈을 이용하여 시간 정보 가져오기 (0) | 2023.03.22 |
댓글