com*_*pie 95 python file overwrite
目前我正在使用这个:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.close()
Run Code Online (Sandbox Code Playgroud)
但问题是旧文件比新文件大.所以我最终得到一个新文件,其中包含旧文件的一部分.
nos*_*klo 167
如果您不想关闭并重新打开文件,为避免竞争条件,您可以truncate
:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()
Run Code Online (Sandbox Code Playgroud)
该功能还可以是更清洁和更安全的使用with open as
每mVChr的评论,这是将关闭处理,即使发生错误.
with open(filename, 'r+') as f:
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
Run Code Online (Sandbox Code Playgroud)
gho*_*g74 15
该fileinput
模块具有一种inline
模式,用于将更改写入您正在处理的文件而不使用临时文件等.该模块很好地封装了通过一个透明地跟踪文件名的对象循环遍历文件列表中的行的常见操作,行号等,如果你想在循环内检查它们.
import fileinput
for line in fileinput.FileInput("file",inplace=1):
if "foobar" in line:
line=line.replace("foobar","bar")
print line
Run Code Online (Sandbox Code Playgroud)