首页 > 解决方案 > 为什么 file.write() 在末尾添加一个额外的字符串?

问题描述

我正在用 python (3.6) 更新一个文本文件,打开 r+

with open(f+'.play', 'r+') as f2:
  play = f2.read()
  result = manipulate(play)
  print(result)
  f2.seek(0, 0)
  f2.write(result)

通过这样做,我得到了一个意想不到的额外结尾部分

</soap:Envelope>ap:Envelope>

当然,额外的部分是在第一次关闭之后>

我通过这样做解决了这个问题

with open(f+'.play', 'r+') as f2:
  play = f2.read()
  result = manipulate(play)
  print(result)
  f2.seek(0, 0)
  f2.truncate()
  f2.write(result)

在这种情况下,写入按我的预期工作。

不过我不明白为什么我需要截断,seek(0,0) 还不够吗?因为在我看来 seek(0) + write 应该以适当的方式覆盖整个内容,我在这里缺少什么知识?

标签: pythonfileio

解决方案


如果您的旧内容的大小大于您正在编写的内容,则多余的部分将保留在文件中。当您打电话时,seek(0, 0)您会从头开始逐字节写入,但不会删除旧数据。当您打电话时,truncate()您会删除旧数据,因此它可以按您的意愿工作。


推荐阅读