執行以下代碼時,在第二次讀取之後,文件被填充爲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,直到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...
來解決問題最好的辦法:不要混合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()
@PaoloMoretti真的。另請注意,OP代碼的行爲取決於您使用的操作系統/文件系統。雖然代碼可能在Linux上使用Ext3/Ext4,但在Win7上使用它與NTFS會導致一堆垃圾寫入文件。 – sloth
這可能與文件系統和/或分區。我沒有完全瞭解詳細信息,但4096字節(即正好4Kb)可能是文件系統和分區中文件的最小大小。 AFAIK,分區的塊大小(通常爲4096字節),文件只能分配給整個塊。所以一個文件總是4096字節的倍數。我認爲有些文件系統可以通過組合小文件來解決這個問題(例如reiserfs)。
你如何衡量文件的大小? – Fabian
嘗試'r +'而不是'w +'。 – Blender
Fabian:我用我的操作系統 Blender:與空文件和r +相同的結果(如果不存在,我在示例中使用w +創建文件) –