带缓冲区接口的Python文件

带缓冲区接口的Python文件,python,struct,Python,Struct,我正在读取一个二进制文件,其中包含两个不同的类似C的结构,主要如下所示: f = open('binary_file.bin', 'rb') header = struct.unpack("2h3i", f.read(struct.calcsize("2h3i")) 我不喜欢重复fmt字符串“2h3i”,只是无意中发现了struct.unpack\u from()。不幸的是,文件对象似乎没有缓冲区接口(我使用的是Python 2.7) 由于文件的大小通常为几GB,data=f.read()并使

我正在读取一个二进制文件,其中包含两个不同的类似C的结构,主要如下所示:

f = open('binary_file.bin', 'rb')
header = struct.unpack("2h3i", f.read(struct.calcsize("2h3i"))
我不喜欢重复fmt字符串
“2h3i”
,只是无意中发现了
struct.unpack\u from()
。不幸的是,文件对象似乎没有缓冲区接口(我使用的是Python 2.7)

由于文件的大小通常为几GB,
data=f.read()
并使用
data
而不是
f
,这是不可取的

我发现使用可能是一种方法,但不幸的是,从mmap解包_时,“读取指针”似乎并不先进

f = open('binary_file.bin', 'rb')
mm = mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ)
print mm.tell()  # --> 0
header = struct.unpack_from("2h3i", mm)  # yeah!
print mm.tell()  # --> 0 why?
但是我可以像这样实现我自己的
解包

def unpack_from(fmt, buffer):
    result = struct.unpack_from(fmt, buffer)
    buffer.seek(struct.calcsize(fmt), 1)
    return result
这是否一个合理的解决方案