Python 快速解包二进制文件的结构列表

Python 快速解包二进制文件的结构列表,python,python-2.7,Python,Python 2.7,此结构正在读取循环中的所有文件: def chunked_all(f): def read_item(): return f.read(108) for data in iter(read_item, ''): info = struct.unpack_from("=HHBBBBBBHQHHIIIIHH32s32s", data) yield (info[9], info[11], info[15]) for i in chun

此结构正在读取循环中的所有文件:

def chunked_all(f):
    def read_item():
        return f.read(108)

    for data in iter(read_item, ''):
        info = struct.unpack_from("=HHBBBBBBHQHHIIIIHH32s32s", data)
        yield (info[9], info[11], info[15])

for i in chuncked_all(file):
    process_data(i)
我喜欢让它更快。读取更多在
上返回的
108
字节的数据维护结构将产生

编辑:

可以使用
(信息[9],信息[11],信息[15])


您是否尝试过读取更多数据,但一次只能产生108字节?是的。但需要创建其他结构才能返回
info
只有前108个字节。我完全不明白这与我的问题有什么关系。
f.read(108)
改为
f.read(108*10)
并且
info
只有
108
字节的第一个序列。其他字节在
for
循环中丢失。这就是为什么一次生成108个字节。速度快了1%。我相信函数
unpack\u from
就是问题所在。为什么不使用
unpack()
?我现在使用。快2%。
def read_item():
    return f.read() # all data file

list_tuples = struct.unpack_from("=HHBBBBBBHQHHIIIIHH32s32s", read_item())
list_tuples
>>> [(1,2,3), (1,2,3), (1,2,3) ... ]
def read_items(f):
  s = f.read(108*1000)
  for o in range(0, len(s), 108):
    yield buffer(s, o, 108)

for data in read_items(f):
   ...