写入和读取文件时的奇怪行为

时间:2012-10-26 08:12:04

标签: python python-2.7

执行以下代码时,在第二次读取之后,文件将填充为零,直到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 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

这可能与文件系统和/或分区有关。我没有完全了解细节,但可能4096字节(即正好4Kb)是文件系统和分区中文件的最小大小。 AFAIK,分区具有块大小(通常为4096字节),文件只能分配给整个块。所以文件总是4096字节的倍数。我认为一些文件系统可以通过组合小文件来解决这个问题(例如reiserfs)。