본문 바로가기

Python

Python의 fileinput module로 파일 수정하는 방법

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)​
  1. fileinput과 sys를 import해준다.
    정확한 이론적 근거는 못 찾았지만, fileinput과 sys는 같이 움직이는 것 같다.
    fileinput으로 읽은 파일에 텍스트를 새로 추가하고 싶으면 sys.stdout.write('New Text')로 추가해주면 된다. 
  2. for line in fileinput.input('./test_text.txt', inplace = True): 파이썬을 다뤄본 사람이라면 충분히 이해할 수 있을테니 자세한 설명은 생략하겠다. 다만, 파일을 읽기만 하는 게 아니라 파일의 일부를 수정하려면  inplace = True 로 설정해줘야 한다. ( True로 설정하면 line을 읽은 다음에 지워준다 )
  3. 지금 상태가 읽어들인 텍스트   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 파라미터에 대한 개념 )