在Python中读取和覆盖文件

目前,我正在使用此:


f = open(filename, 'r+')

text = f.read()

text = re.sub('foobar', 'bar', text)

f.seek(0)

f.write(text)

f.close()

但是问题在于旧文件大于新文件。因此,我最终得到了一个新文件,该文件的末尾有旧文件的一部分。


FFIVE
浏览 693回答 3
3回答

翻阅古今

如果您不想关闭并重新打开文件,为避免出现竞争情况,可以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()

蓝山帝景

该fileinput模块提供了一种inline模式,用于在不使用临时文件等的情况下将更改写入正在处理的文件。该模块很好地封装了通过对象透明地跟踪文件名来循环遍历文件列表中的行的常见操作,行号等,如果您想在循环中检查它们。import fileinputfor line in fileinput.FileInput("file",inplace=1):    if "foobar" in line:         line=line.replace("foobar","bar")    print line
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python