gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:49:48 25 4
gpt4 key购买 nike

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

所以文件是这样的:

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

数据包含整数、指针、 double 值等。

我发现 python 甚至无法处理这种情况。如果我在内存中读取整个文件就没有问题。它很快。但是似乎 struct 包在性能上并不好。它几乎卡在解压缩字节上。

感谢任何帮助。

谢谢。

最佳答案

其他答案推荐的

structarray 可以很好地实现细节,如果您的需求总是顺序读取所有内容,则可能就是您所需要的文件或其前缀。其他选项包括 buffer , mmap , 甚至 ctypes ,取决于您未提及的有关您的确切需求的许多细节。也许一些专门的 Cython 编码的帮助程序可以提供您需要的所有额外性能,如果没有合适的和可访问的库(C、C++、Fortran 等)已经存在,可以用于处理这个巨大的文件作为接口(interface)你需要。

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

你有一个非常大规模的问题(毫无疑问,非常大规模的硬件支持它,因为你提到你可以轻松地将所有文件读入内存,这意味着一个 64 位机器有几十 GB 的 RAM --哇!),因此,为优化其处理而进行细致的关注是非常值得的——但除非我们了解足够的细节,否则我们无法在如此细致的关注上提供太多帮助!-)。

关于python - 从大型二进制文件中读取数据的任何有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1287747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com