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):
...