2014-07-09 31 views
2

我有删除文件内容的问题。我有一个文件'ABC'在里面。我打开它并truncate()清除文件中的所有内容,然后写入新内容。但是无论我写什么,都会附加到之前的内容。Python不删除截断文件的内容

>>> 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

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

+0

是的,这是POSIXly正确的答案,但python'truncate'确实也将文件的大小作为参数。 –

+0

@AnttiHaapala好点,谢谢你的提示。 – timgeb

1

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

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

1

From the docs:

file.truncate([size])

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

你叫handle.truncate()调用handle.read(),此时的当前位置在文件结束后,所以Python文件截断到现在的规模,它什么都不做。您需要将0作为参数传递给truncatehandle.truncate(0)

+0

使用截断(0),然后写入似乎清除数据,但当我然后尝试写入更多的数据它似乎并不节省 –