Python没有使用truncate擦除文件的内容

时间:2014-07-09 22:53:52

标签: python

我在删除文件内容时遇到问题。我有一个'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 个答案:

答案 0 :(得分:3)

handle.read()之后,你就在文件的末尾,所以没有什么可以从这里截断。在handle.seek(0)之后发出handle.read()。然后将数据写入文件,然后在必要时截断。

答案 1 :(得分:1)

truncate的文档中,默认值是当前位置。您需要通过0

  

截断文件的大小。如果存在可选的大小参数,   该文件被截断为(最多)该大小。 大小默认为   当前位置。当前文件位置未更改。注意   如果指定的大小超过文件的当前大小,则结果为   依赖于平台:可能性包括文件可能保留   未更改,增加到指定的大小,就像零填充,或   使用未定义的新内容增加到指定的大小。   可用性:Windows,许多Unix变体。

答案 2 :(得分:1)

From the docs:

  

file.truncate([size])

     

截断文件的大小。如果存在可选的大小参数,则文件将截断为(最多)该大小。大小默认为当前位置。

在调用handle.truncate()之后调用handle.read(),此时当前位置是文件的结尾,因此Python会将文件截断为当前大小,而不会执行任何操作。您需要将0作为参数传递给truncatehandle.truncate(0)