현재 나는 이것을 사용하고 있습니다 :
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()
기능은 또한 오류가 발생하더라도 파일 처리기를 닫는 컨텍스트 관리자로 사용 하면 더 깨끗하고 안전open
합니다!
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
답변
솔직히 기본 파일 작업을 수행하는이 클래스를 살펴볼 수 있습니다. 쓰기 방법은 이전 데이터를 덮어 쓰고 추가합니다.
class IO:
def read(self, filename):
toRead = open(filename, "rb")
out = toRead.read()
toRead.close()
return out
def write(self, filename, data):
toWrite = open(filename, "wb")
out = toWrite.write(data)
toWrite.close()
def append(self, filename, data):
append = self.read(filename)
self.write(filename, append+data)
답변
새 파일로 작성해보십시오 ..
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()
답변
