在Python中读取和覆盖文件

发布于 2021-01-29 15:06:11

目前,我正在使用此:

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

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

关注者
0
被浏览
83
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看