developer tip

Python에서 파일 읽기 및 덮어 쓰기

copycodes 2020. 8. 28. 07:36
반응형

Python에서 파일 읽기 및 덮어 쓰기


현재 나는 이것을 사용하고 있습니다 :

f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.close()

그러나 문제는 이전 파일이 새 파일보다 크다는 것입니다. 그래서 나는 그 끝에 이전 파일의 일부가있는 새 파일로 끝납니다.


경쟁 조건을 피하기 위해 파일을 닫았다가 다시 열지 않으려면 다음과 같이 할 수 truncate있습니다.

f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()

기능은 또한 mVChr의 주석을 사용하여 더 깨끗하고 안전 할 수 있으며 with open as, 오류가 발생하더라도 핸들러를 닫습니다.

with open(filename, 'r+') as f:
    text = f.read()
    text = re.sub('foobar', 'bar', text)
    f.seek(0)
    f.write(text)
    f.truncate()

아마도. 후에 파일을 닫고 text = re.sub('foobar', 'bar', text)쓰기 위해 다시 열고 (따라서 이전 내용을 지우고) 업데이트 된 텍스트를 작성 하는 것이 더 쉽고 깔끔 할 것입니다.


fileinput모듈은이 inline투명하게 파일 이름을 추적 오브젝트를 통해, 모듈 멋지게 파일 목록의 라인을 통해 루프의 공동 작업을 캡슐화 임시 파일을 사용하는 등없이 당신이 처리하는 파일에 대한 변경 사항을 작성하기위한 모드 루프 내에서 검사해야하는 경우 줄 번호 등.

import fileinput
for line in fileinput.FileInput("file",inplace=1):
    if "foobar" in line:
         line=line.replace("foobar","bar")
    print line

새 파일로 작성해보십시오 ..

f = open(filename, 'r+')
f2= open(filename2,'a+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.close()
f2.write(text)
fw.close()

참고 URL : https://stackoverflow.com/questions/2424000/read-and-overwrite-a-file-in-python

반응형