Python的读写操作会将\ x00添加到文件中

Mil*_*dek 5 python file-io

在python中处理文件时遇到了一个奇怪的问题.假设我有一个文本文件和一段简单的代码来读取文件的内容,然后用未改变的内容重写它.

FILE.TXT

这是一个测试文件

Python代码

f=open(File.txt,'r+')
data=f.read()
f.truncate(0)
f.write(data)
f.close()
Run Code Online (Sandbox Code Playgroud)

运行上面的代码后File.txt似乎是一样的.但是,当我在十六进制编辑器中打开它时,我很惊讶\x00在文本文件的实际内容之前看到了很多(NULL)字节,这之前是不存在的.

有人可以解释一下吗?

kin*_*all 9

假设您的文件中包含20个字节.所以f.read()读取20个字节.现在您将文件截断为0字节.但是你的文件位置指针仍然是20.为什么不是?你没有动过它.所以当你写作时,你开始写第21个字节.您的操作系统用零填充20个丢失的字节.

为了避免这种情况,f.seek(0)再次写作之前.