파이썬 텍스트 파일 수정 및 저장

조회수 7577회

파이썬내에서 open() 함수를 이용하면 텍스트파일의 읽기, 쓰기, 추가의 기능이 있지만 제가 원하는 것은 기존의 존재하는 파일의 수정한 뒤 바로 저장하고 싶습니다.

우선 전달하고자 하는 궁금한점을 간단한 예시를 통해 보여드리겠습니다.

이미지

위와 같은 txt파일이 존재할 때 우선 파일을 읽어온 후,

f = open("C:/Users/YEONGHUN/Desktop/test.txt", 'r')
file = f.read()
f.close()

test파일의 내용을 list로 만들어 for문으로 iteration하면서 7이라는 숫자를 찾으면 0으로 수정하여 그 test파일은 바로 저장시키고 싶어서 아래와 같이 code를 작성했습니다.

(물론 open 함수로 쓰기 기능을 쓰면 파일 내용을 삭제시킨 후 0이 되는 것을 알고 있지만 마땅한 예시로 보여드릴게 없어서 원하는 구상을 코드로 작성한 것입니다.)

list = file.splitlines()

print(list)
for line in list:
    print(line)
    if line == '7':
        g = open("C:/Users/YEONGHUN/Desktop/test.txt", 'w+')
        new = g.write("0")

        g.close()

핵심은 기존에 존재하는 파일의 내용 중 for문과 if문을 사용하여 원하는 부분을 수정하고 바로 저장할 수 있는 기본소스가 있다면 고수님들의 의견을 부탁드립니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 파일 객체에 seek 라는 메소드가 있습니다.

    파일을 열고(r+) 내용을 메모리에 올리고(list 등) 메모리상 수정작업을 한 뒤 seek(0) 을 해서 포인터를 처음으로 설정후에 메모리의 내용을 write 하면 overwrite 가 됩니다.

    • 의견을 올려주셔서 진심으로 감사합니다!! 귀찮게 해드리게해서 정말 죄송하지만 메모리상 수정작업이라고 하심이 replace문과 같은 방법을 사용해서 해당 메모리 index를 바꿔주는 것을 의미하는건가요?? 알 수 없는 사용자 2020.5.22 10:15
    • list 를 하나 만들어도 그건 메모리에 존재하는 겁니다. 파일에서 라인을 읽어들여서 수정하면 그 역시 메모리에서 수정된 겁니다. 1. 파일을 open 한다. 2. readlines 를 통해 모든 라인을 메모리에 저장한다. 3. 2의 결과로 원하는대로 수정한다. 3. seek(0) 으로 파일의 포인터를 이동한다. 4. 3의 결과를 write 한다. 정영훈 2020.5.22 10:39

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)