Python读写将\ x00添加到文件中

时间:2012-03-15 22:58:15

标签: python file-io

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

FILE.TXT

  

这是一个测试文件

Python代码

f=open(File.txt,'r+')
data=f.read()
f.truncate(0)
f.write(data)
f.close()

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

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:9)

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

为了避免这种情况,f.seek(0)再写一次。

答案 1 :(得分:1)

f.truncate(0)将文件的所有字节设置为\x00。但是,它不会更改文件指针 - 您仍然在调用read之后的位置。因此,如果您编写任何内容,操作系统会将文件扩展到新的长度(原始长度+ len(data))。

为避免这种情况,请致电seek

with open('File.txt', 'r+') as f:
  data=f.read()
  f.seek(0)
  f.truncate(0)
  f.write(data)