我的代码应该读取4个字节,但有时只读3个:
f = open('test.sgy', 'r+')
f.seek(99716)
AAA = f.read(4)
BBB = f.read(4)
CCC = f.read(4)
print len(AAA)
print len(BBB)
print len(CCC)
exit()
此程序返回: 4 3 4
我做错了什么?谢谢!
答案 0 :(得分:5)
你假设read
做了不做的事情。正如其文档告诉您的那样:
read(...)
read([size]) -> read at most size bytes, returned as a string.
最多 size
字节
如果您需要完全 size
字节,则必须创建包装函数。
这是一个你可以适应的(未经过彻底测试的)例子:
def read_exactly( fd, size ):
data=""
remaining= size
while remaining>0: #or simply "while remaining", if you'd like
newdata= fd.read(remaining)
if len(newdata)==0: #problem
raise IOError("Failed to read enough data")
data+=newdata
remaining-= len(newdata)
return data
正如Mark Dickinson在评论中提到的,如果您使用的是Windows,请确保您是reading in binary mode - 否则您可能会read
错误地发送您的(二进制)数据。