2012-10-26 64 views
2

執行以下代碼時,在第二次讀取之後,文件被填充爲0,直到4096字節大。我想不通爲什麼:寫入和讀取文件時的奇怪行爲

f = open("file.txt", "w+") 
f.read() 
# gives '' 
f.write("Hello") 
f.read() 
# filled with \x00,\x00 
f.close() 
# file is 4096 bytes large... 
+0

你如何衡量文件的大小? – Fabian

+2

嘗試'r +'而不是'w +'。 – Blender

+0

Fabian:我用我的操作系統 Blender:與空文件和r +相同的結果(如果不存在,我在示例中使用w +創建文件) –

回答

3

來解決問題最好的辦法:不要混合read()write()

否則:在write()後,使用seek()第二read()之前,從一開始閱讀您的文件

f = open("file.txt", "w+") 
print f.read()  # prints '' 
f.write("Hello") 
f.seek(0) 
print f.read()  # print 'Hello' 
f.close() 
+0

@PaoloMoretti真的。另請注意,OP代碼的行爲取決於您使用的操作系統/文件系統。雖然代碼可能在Linux上使用Ext3/Ext4,但在Win7上使用它與NTFS會導致一堆垃圾寫入文件。 – sloth

2

這可能與文件系統和/或分區。我沒有完全瞭解詳細信息,但4096字節(即正好4Kb)可能是文件系統和分區中文件的最小大小。 AFAIK,分區的塊大小(通常爲4096字節),文件只能分配給整個塊。所以一個文件總是4096字節的倍數。我認爲有些文件系統可以通過組合小文件來解決這個問題(例如reiserfs)。