我在删除文件内容时遇到问题。我有一个'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'
。
答案 0 :(得分:3)
在handle.read()
之后,你就在文件的末尾,所以没有什么可以从这里截断。在handle.seek(0)
之后发出handle.read()
。然后将数据写入文件,然后在必要时截断。
答案 1 :(得分:1)
从truncate
的文档中,默认值是当前位置。您需要通过0
。
截断文件的大小。如果存在可选的大小参数, 该文件被截断为(最多)该大小。 大小默认为 当前位置。当前文件位置未更改。注意 如果指定的大小超过文件的当前大小,则结果为 依赖于平台:可能性包括文件可能保留 未更改,增加到指定的大小,就像零填充,或 使用未定义的新内容增加到指定的大小。 可用性:Windows,许多Unix变体。
答案 2 :(得分:1)
file.truncate([size])
截断文件的大小。如果存在可选的大小参数,则文件将截断为(最多)该大小。大小默认为当前位置。
在调用handle.truncate()
之后调用handle.read()
,此时当前位置是文件的结尾,因此Python会将文件截断为当前大小,而不会执行任何操作。您需要将0作为参数传递给truncate
:handle.truncate(0)
。