2014-11-13 50 views
1

我在Python shell中,我試圖理解基本知識。以下是我輸入的內容:無法理解Python的「截斷」和「寫入」

doc = open('test.txt', 'w') # this opens the file or creates it if it doesn't exist 
doc.write('blah blah') 
doc.truncate() 

我瞭解第一行。但是,在第二行中,是不是應該將「blah blah」寫入文件?它不這樣做。但是,當我對文件運行truncate函數時,'blah blah'突然出現。有人可以向我解釋這個邏輯是如何工作的嗎?我想truncate應該擦除文件的內容?爲什麼前面的write行顯示出來?

+0

你可以在這裏看到答案:http://stackoverflow.com/questions/26917197/what-exactly-does-truncate-do-in-this-case – merenptah

+0

@merenptah這是我以前的問題。我明白'truncate'的作用,但在這種情況下它不能按預期工作,這就是爲什麼我打開第二個更具體的問題的原因。 – J82

+2

寫入將被緩存,並且直到您刷新緩衝區或關閉文件纔會顯示,並且截斷可能會在設置文件大小之前刷新緩衝區。 –

回答

0

如果您未指定大小參數。該功能取當前位置。

如果你想刪除文件的內容:從manual

with open('test.txt', 'w') as doc: 
    doc.wrie('blah blah') 
    doc.truncate(0) 
2

doc = open('test.txt', 'w') # this opens the file or creates it if it doesn't exist 
doc.write('blah blah') 
doc.truncate(0) 

或更好

file.truncate([大小])

[...]大小默認爲當前p命名[...]

因此,當您打開並寫入文件時,當前位置是文件的結尾。基本上,你從文件的末尾截斷。因此,除了實際刷新緩衝區以外,沒有其他效果,並且將文本寫入磁盤。 (truncate截斷前沖刷)

嘗試使用truncate(0);這將清空文件。

+0

但是我試圖在第二行之後向文件寫'blah blah'。這不是說'寫'應該做什麼,或者我有這部分困惑?爲什麼'blah blah'在第三行之後出現? – J82

+0

'write'是一個緩衝寫入。只要操作系統感覺它被寫入磁盤。使用'flush'將緩衝區推送到磁盤。 – damienfrancois

0

你一樣與上下文管理器來代替:

with open('test.txt', 'w') as doc: 
    doc.write('blah blah') 
    # doc.truncate() 

以上將截斷當前的位置,這是在文件的結尾,這意味着它不會截斷任何東西。

這樣做,它會截斷在第0個字節的文件,有效地清除它。

doc.truncate(0) 

我從你的意見,你可能仍然有麻煩,麻煩的是可以利用上下文管理來解決,請參閱:

>>> def foofile(): 
...  with open('/temp/foodeleteme', 'w') as foo: 
...   foo.write('blah blah blah') 
...   foo.truncate(0) 
...  with open('/temp/foodeleteme') as foo: 
...   print foo.read() 
...   
>>> foofile() 

打印什麼。