次のコードを実行すると、2 回目の読み取りの後、ファイルが 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...
次のコードを実行すると、2 回目の読み取りの後、ファイルが 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()
。
それ以外の場合: の後、2 番目の前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()
これはおそらくファイルシステムやパーティションに関連しています。詳細については完全には理解していませんが、ファイルシステムとパーティション内のファイルの最小サイズは4096バイト(つまり正確に4Kb)である可能性があります。AFAIK、パーティションのブロックサイズ(多くの場合4096バイト)があり、ファイルはブロック全体にのみ割り当てることができます。したがって、ファイルは常に4096バイトの倍数です。一部のファイルシステム(reiserfsなど)では、小さなファイルを組み合わせることでこれを回避できると思います。