1 回答
TA贡献1859条经验 获得超6个赞
看看 kaitai - https://kaitai.io/,这是一个用于跨多种语言解析二进制文件的库,具有以独立于语言的方式定义文件格式的框架。
它能够在文件格式中定义条件,并根据需要调整解析。虽然学习曲线并非立即微不足道,但也不是太难。
假设您想自己做而不是使用外部库,则需要考虑一些可以提高性能/代码的事情:
使用
struct.unpack_from(format, buffer, offset=0)
而不是当前方法,因为buffer[index : index + recordLength]
可能会创建新对象并复制不需要的内存如果你想解包相同格式的数组,你可以进一步改进它
struct.iter_unpack(format, buffer)
,然后迭代结果:
import itertools
import struct
def tryReadRecordsArrayFromBuffer(buffer, numRecords, format, fieldNames):
unpack_iter = struct.iter_unpack(buffer, format)
return [
# I like this better than dict(zip(...)) but you can also do that
{k: v for k, v in zip(fieldNames, vals)}
# We use `islice` to only take the first numRecords values
for vals in itertools.islice(unpack_iter, numRecords)
]
添加回答
举报