Python 使用 truncate 不清空文件内容

3 投票
3 回答
740 浏览
提问于 2025-04-18 12:43

我在清空文件内容时遇到了一些问题。我有一个文件,里面有 'ABC'。我打开这个文件,然后用 truncate() 来清空文件里的所有内容,接着再写入新的内容。但是,无论我写什么,新的内容总是被加到原来的内容后面。

>>> handle=open('test.txt', 'r+')
>>> stuff = handle.read()
>>> stuff
'ABC'
>>> handle.truncate()
>>> handle.write('DEF'+stuff)
>>> handle.close()
>>> handle=open('test.txt', 'r+')
>>> handle.read()
'ABCDEFABC'

我本以为应该得到 'DEFABC',结果却是 'ABC' 后面加上了 'DEFABC'

3 个回答

2

来自文档的说明:

file.truncate([size])

这个方法可以用来改变文件的大小。如果你提供了一个可选的大小参数,文件会被缩减到这个大小(最多到这个大小)。如果没有提供,默认会使用当前的位置。

当你在调用 handle.read() 之后再调用 handle.truncate() 时,此时的当前位置就是文件的末尾,所以 Python 会把文件缩减到当前的大小,这样其实什么也不会发生。你需要把 0 作为参数传给 truncate 方法:handle.truncate(0)

2

根据truncate的说明,默认情况下,文件会被截断到当前的位置。如果你想从头开始截断文件,需要传入0

这个功能是用来改变文件的大小的。如果你提供了一个可选的大小参数,文件会被截断到这个大小(最多到这个大小)。默认情况下,这个大小是当前的位置。当前文件的位置不会改变。需要注意的是,如果你指定的大小超过了文件现在的大小,结果会依赖于你使用的平台:可能的结果包括文件保持不变、文件增加到指定大小并用零填充,或者文件增加到指定大小但内容不确定。

3

在你使用了 handle.read() 之后,文件的末尾就到了,所以这里没有东西可以截断。你需要在 handle.read() 之后使用 handle.seek(0),这样就可以把光标移动到文件的开头。然后再把你的数据写入文件,如果需要的话再进行截断。

撰写回答