320x100
320x100
fileinput 모듈이라고 해서 크게 다른 건 없는 것 같다. 그냥 Python에서 파일 입출력할 때 쓰는 모듈인데 흔히 쓰는 open( ) 함수 말고 fileinput.input( ) 함수를 쓰는 거라 생각하면 된다.
그럼 왜 fileinput 이란 모듈을 따로 만들었으며 언제 사용하는 걸까??
이렇게 저렇게 쓰다보니 fileinput을 사용하면 보다 간단하게 파일 수정을 할 수 있기 때문이란 생각을 하게 됐다.
아래와 같이 test_text.txt 파일이 있다고 가정하자.
name : tube
name : ryan
name : apeach
그리고 형태는 유지시키면서 두 번째 줄의 "ryan"을 "라이언"으로 바꿔보도록 하자. open( )을 사용하면 불가능한 건 아니지만 fileinput.input( )에 비하면 아주 조금 복잡하게 구현해야 한다.
그럼 fileinput은 얼마나 간단하길래??
코드를 봐보자.
"줄 읽기 → 줄 지우기 → 해당 줄 자리에 새로 쓰기"의 흐름으로 구성되어 있다.
import fileinput
import sys
for line in fileinput.input('./test_text.txt', inplace = True):
if 'ryan' in line:
line = line.replace(line, 'name : 라이언\n')
sys.stdout.write(line)
- fileinput과 sys를 import해준다.
정확한 이론적 근거는 못 찾았지만, fileinput과 sys는 같이 움직이는 것 같다.
fileinput으로 읽은 파일에 텍스트를 새로 추가하고 싶으면 sys.stdout.write('New Text')로 추가해주면 된다. - for line in fileinput.input('./test_text.txt', inplace = True): 파이썬을 다뤄본 사람이라면 충분히 이해할 수 있을테니 자세한 설명은 생략하겠다. 다만, 파일을 읽기만 하는 게 아니라 파일의 일부를 수정하려면 inplace = True 로 설정해줘야 한다. ( True로 설정하면 line을 읽은 다음에 지워준다 )
- 지금 상태가 읽어들인 텍스트 name : tube 는 line에 저장돼 있지만, test_text.txt 상에서는 name : tube 가 지워진 상태다. 그래서 지워진 텍스트 파일에 다시 저장해줘야 하는데 이 때 쓰는 함수가 sys.stdout.write(line)이다. "ryan"의 경우, name : 라이언 으로 변경해준 다음 저장하면 우리가 원하는 결과를 얻을 수 있게 된다.
실행하고 나서 test_text.txt 파일을 열어보면 아래와 같이 변경된 것을 확인할 수 있다.
name : tube
name : 라이언
name : apeach
< 참고 사이트 >
https://www.oreilly.com/library/view/python-standard-library/0596000960/ch02s02.html
https://soooprmx.com/archives/4940
https://3months.tistory.com/292 ( inplace 파라미터에 대한 개념 )
'Python' 카테고리의 다른 글
Python으로 신호 푸리에 변환하는 방법 (4) | 2021.08.31 |
---|---|
Python으로 DICOM 파일 다루는 방법 (11) | 2021.08.31 |
imgaug 라이브러리 사용 방법 (0) | 2021.08.31 |
Python으로 지정 경로에 폴더 존재하는지 확인하고 없으면 폴더 생성하는 방법 (1) | 2021.08.31 |
Anaconda, Python, CMD, 명령어 정리 (0) | 2021.08.31 |