python - 在 Python 中读取和覆盖文件

标签 python file overwrite

目前我正在使用这个:

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()

该功能也可能是 cleaner and safer使用 open 作为上下文管理器,即使发生错误也会关闭文件处理程序!

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

关于python - 在 Python 中读取和覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2424000/

相关文章:

python - 了解 Python 中的异常处理

python - 如何通过 gspread 清除谷歌表格中的范围

java - 如何发送带有 android Intent 的附件的电子邮件?

java - 从文件读取到列表

python - 你能覆盖一个由函数结果定义的变量而不先在 python 中清除吗?

Python继承与字典突变

python - 测试 : testing a websocket connection

windows - 如何将尖括号等特殊字符输出到 HTML/XHTML/XML 文件中?

java - StringBuilder - 完全替换现有字符串。有什么方法吗?

windows - Windows 上的 Python 3.5 - 覆盖其他用户创建的文件 "PermissionError: [Errno 13]"