在 python 中高效处理大型二进制文件



我目前正在读取每个 150,000 kb 的二进制文件。它们包含大约 3,000 条结构化二进制消息,我正在尝试找出处理它们的最快方法。在每条消息中,我只需要实际读取大约 30 行数据。这些消息具有标头,允许我跳转到消息的特定部分并查找所需的数据。

试图弄清楚解压缩整个消息(每条消息 50 kb(并从包含大量我实际上不需要的数据的生成的元组中提取数据是否更有效,还是使用 seek 转到每条消息所需的每行数据并解压缩这 30 行中的每一行的成本会更低?或者,这是更适合mmap的东西吗?

50 KB 内寻找(可能多次(可能不值得:系统调用很昂贵。 相反,将每条消息读入一个bytes,并使用切片来"搜索"所需的偏移量并获得适量的数据。

bytes包裹在memoryview中以避免复制可能是有益的,但对于较小的个人读取,这可能无关紧要。 如果你可以使用memoryview,一定要尝试使用mmap,它在整个文件上公开了类似的接口。 如果您使用的是 struct ,它的unpack_from已经可以在bytesmmap内查找,而无需包装复制。

最新更新