python – 从大型二进制文件读取数据的任何有效方法?

我需要在一个二进制文件中处理数十GB的数据.数据文件中的每条记录都是可变长度的.

所以文件是这样的:

<len1><data1><len2><data2>..........<lenN><dataN>

数据包含整数,指针,双精度值等.

我发现python甚至无法处理这种情况.如果我在内存中读取整个文件没有问题.它很快.但似乎struct包不擅长性能.它几乎坚持解压缩字节.

任何帮助表示赞赏.

谢谢.

最佳答案
其他答案推荐的struct和array适用于实现的细节,如果您的需求总是按顺序读取所有文件或其前缀,则可能就是您所需要的.其他选项包括buffer,mmap,甚至ctypes,具体取决于您未提及的有关您的确切需求的许多细节.如果没有合适且可访问的库(在C,C,Fortran等中)已经存在,可以接口以便处理这个庞大的文件,那么一个专门的Cython编码助手可能会提供您所需的所有额外性能.你需要.

但显然这里存在一些特殊问题 – 例如,数据文件如何包含指针,这些指针本质上是一个与寻址内存相关的概念?它们可能是“抵消”,如果是这样,它们究竟是如何基于和编码的?您的需求是否比简单的顺序读取(例如,随机访问)更先进,如果是这样,您是否可以进行第一次“索引”传递以将所有从文件开始到记录开始的偏移变为更可用,更紧凑的,手工格式化的辅助文件? (该偏移的二进制文件对于数组来说是很自然的 – 除非偏移量需要比机器上的数组支持更长!).记录长度和组成的分布以及构成“数十千兆字节”的记录数量是多少?等等

你有一个非常大规模的问题(毫无疑问是非常大规模的硬件支持它,因为你提到你可以轻松地将所有文件读入内存,这意味着一个带有几十GB RAM的64位盒 – 哇!)因此,优化其处理的详细护理非常值得 – 但除非我们了解足够的细节,否则我们对这种详细的护理无能为力! – ).

转载注明原文:python – 从大型二进制文件读取数据的任何有效方法? - 代码日志