为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中读取和覆盖文件

在Python中读取和覆盖文件

FFIVE 2019-10-29 11:13:54
目前,我正在使用此:f = open(filename, 'r+')text = f.read()text = re.sub('foobar', 'bar', text)f.seek(0)f.write(text)f.close()但是问题在于旧文件大于新文件。因此,我最终得到了一个新文件,该文件的末尾有旧文件的一部分。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

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


查看完整回答
反对 回复 2019-10-29
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

该fileinput模块提供了一种inline模式,用于在不使用临时文件等的情况下将更改写入正在处理的文件。该模块很好地封装了通过对象透明地跟踪文件名来循环遍历文件列表中的行的常见操作,行号等,如果您想在循环中检查它们。


import fileinput

for line in fileinput.FileInput("file",inplace=1):

    if "foobar" in line:

         line=line.replace("foobar","bar")

    print line


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 685 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信