Python f.read没有读取正确的字节数

Mar*_*erg 4 python python-2.7

我的代码应该读取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()
Run Code Online (Sandbox Code Playgroud)

并且该程序返回:4 3 4

我究竟做错了什么?谢谢!

gon*_*opp 5

你假设read它做了一件事.正如其文档告诉您:

read(...)
    read([size]) -> read at most size bytes, returned as a string.
Run Code Online (Sandbox Code Playgroud)

最多 读取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
Run Code Online (Sandbox Code Playgroud)

正如Mark Dickinson在评论中提到的,如果您使用的是Windows,请确保您正在以二进制模式进行读取 - 否则您read的(二进制)数据可能会出错.