python - 为什么 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 应该以适当的方式覆盖整个内容,我在这里缺少什么知识?
解决方案
如果您的旧内容的大小大于您正在编写的内容,则多余的部分将保留在文件中。当您打电话时,seek(0, 0)
您会从头开始逐字节写入,但不会删除旧数据。当您打电话时,truncate()
您会删除旧数据,因此它可以按您的意愿工作。
推荐阅读
- google-cloud-platform - 什么问题导致 Google AI Platform 视频批量预测无法处理输入文件
- android - 使用 PIN 码的 Google TV Casting
- ruby-on-rails-6 - 无法运行资产:由于初始化程序而预编译
- flutter - Flutter & google maps 如何保存用户轨迹
- react-testing-library - React 测试库与 JsDom
- java - 如果字符串是某个字母,我如何获取用户输入并用某个字符替换字符串的最后 2 位数字
- css - 如何使溢出对象可滚动或从右侧开始?
- python - 需要帮助破解python中的A*(A星)算法
- npm - 升级 yarn 似乎可以工作,但没有,安装了 nvm
- sql - 前一个分区 ID 更改时重置 ROW_NUMBER()