在 python 中使用 truncate(0) 会出现无效字符

invalid characters happens by using truncate(0) in python

我在 python 中使用了 truncate(0) 来覆盖我文件中的数据。部分代码是这样的:

l=f.readlines()
f.truncate(0)
    for w in l:
        data=w.split()
        if 105==int(data[0]): 
            f.write('%s %s\n'%((str(data[0]),str(np.mean(b)))))
        else:
            f.write('%s %s\n'%((str(data[0]),(data[1]))))

代码工作正常并且输出正确,但是当我打开输出文件(txt 格式)时出现“无效字符”错误。在输出文件的开头,我有这个额外的数据:

[=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=][=12=]

坏字符错误是针对这些额外数据的。在这个无效字符之后,我有输出数据,由python制作,这是正确的。

为什么会发生这种情况,我该如何解决?

因为在f.readlines()调用之后,文件位置仍然设置为原来的文件末尾。 truncate 不会更改文件位置,因此当您编写字符串时,它会用零填充到文件的旧末尾。在截断之前只需执行 f.seek(0)