Python 使用 truncate 不清空文件内容
我在清空文件内容时遇到了一些问题。我有一个文件,里面有 '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)
,这样就可以把光标移动到文件的开头。然后再把你的数据写入文件,如果需要的话再进行截断。