2014-07-09 63 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),然後寫入似乎清除數據,但當我然後嘗試寫入更多的數據它似乎並不節省 –