파이썬에서 파일 내용에서 특정 라인을 찾아 바꾸기
저는 텍스트 파일의 내용을 순환하며 일부 줄을 검색 및 대체하고 결과를 파일에 다시 작성하고 싶습니다. 파일 전체를 먼저 메모리에 로드 한 다음 다시 작성할 수 있지만, 그것은 아마도 최선의 방법이 아닐 것입니다.
다음 코드 내에서 이것을 가장 잘하는 방법은 무엇인가요?
f = open(file)
for line in f:
if line.contains('foo'):
newline = line.replace('foo', 'bar')
# how to write this newline back to the file
답변 1
가장 짧은 방법은 아마 fileinput module을 사용하는 것일 것입니다. 예를 들어, 다음은 파일에 라인 번호를 추가하는 것입니다.
import fileinput
for line in fileinput.input(test.txt, inplace=True):
print('{} {}'.format(fileinput.filelineno(), line), end='') # for Python 3
# print %d: %s % (fileinput.filelineno(), line), # for Python 2
여기에서 일어나는 것은:
원본 파일은 백업 파일로 이동됩니다.
표준 출력이 루프 내에서 원래 파일로 리다이렉트됩니다.
따라서 어떤 print 문구도 원본 파일로 다시 기록됩니다.
fileinput은 더 많은 벨과 휘슬을 가지고 있습니다. 예를 들어, 명시적으로 반복하지 않고도 sys.args[1:]의 모든 파일에 자동으로 작업 할 수 있습니다. Python 3.2부터는 언제 어디서나 편리하게 사용할 수 있는 컨텍스트 매니저를 제공합니다.
fileinput는 일회용 스크립트에는 좋지만, 실제 코드에서는 읽기 어렵거나 익숙하지 않으므로 사용에 주의해야합니다. 실제(제작) 코드에서는 명시적인 프로세스를 만들기 위해 약간의 코드 라인을 더 투자함으로써 코드를 읽기 쉽게 만드는 것이 가치가 있습니다.
두 가지 옵션이 있습니다.
파일 크기가 지나치게 크지 않으므로 메모리에 전부 읽어들일 수 있습니다. 그런 다음 파일을 닫고 쓰기 모드로 다시 열어서 수정된 내용을 다시 작성하면 됩니다.
파일이 너무 크므로 메모리에 저장할 수 없습니다. 임시 파일로 옮긴 후, 줄 단위로 읽으며 기존 파일에 다시 쓰세요. 이 작업은 저장 용량을 두 배로 필요로 합니다.
답변 2
파이썬에서 파일안에 있는 특정 라인을 검색하고 대체하는 방법을 알아보자.우선적으로, 우리는 Python 내장함수중에 open() 함수를 사용하여 파일을 열어야 합니다. open() 함수를 사용하면 파일을 열고 파일객체를 반환합니다. 파일을 열 때, 파일 이름을 인자로 받아와야 하며, 두번째 인자로는 파일을 읽기 전용('r'), 쓰기 전용('w') 또는 추가 쓰기 모드('a')로 열 것인지 여부를 지정할 수 있습니다.
그 다음, 우리는 readlines() 함수를 사용하여 파일의 모든 라인들을 리스트 형태로 저장합니다. 그리고나서, for 반복문을 사용하여 각 라인들을 순회하며, 우리가 찾고 싶은 라인을 검색합니다. 그 다음에는, 우리가 원하는 라인으로 대체하기 위해 replace() 함수를 사용합니다.
마지막으로, 새로운 라인으로 대체한 리스트를 파일에 다시 쓰기 위해, 우리는 파일을 쓰기 모드로 열고, writelines() 함수를 사용하여 리스트 내의 모든 라인을 파일에 쓰면 됩니다. 최종적으로 파일을 닫아주어야 하며, close() 함수를 사용하여 파일객체를 닫아주면 됩니다.
이렇게 하면, 파이썬으로 파일안에 있는 특정 라인을 검색하고 대체할 수 있습니다. 이 기능은 많은 경우 파일을 쉽게 수정할 수 있게 해주므로, 유용한 기능입니다.
물론, 이러한 파일 조작은 어떤 경우에는 위험할 수 있으며, 파일을 손상시킬 수 있기 때문에 주의를 기울이는 것이 중요합니다. 또한, 같은 결과를 도출하는 방법이 여러 가지일 수 있고, 이 글의 해결 방안 외에도 더 좋은 방법이 존재할 수 있습니다.
그럼 이제, 파이썬을 사용하여 파일안의 특정 라인을 검색하고 대체하는 방법에 대해 알아보았습니다. 앞으로 이 기능을 적극 활용하며, 효율적으로 파일을 관리하길 바랍니다.