用python索引非常大的十六进制文件



我正试图编写一个程序,从一个(非常(大的文件中解析数据,该文件包含8组16位十六进制值的偶数行。例如,有一行看起来像这样:

edfc b600 edfc 2102 81fb 0000 d1fe 0eff

数据文件预计在1-4TB之间,所以我不确定最好的方法是什么。如果我使用Python的open((函数加载这个文件,结果会不会很糟糕?我担心如果我加载这么大的文件只是为了索引,这会对我的内存产生多大影响。或者,如果有一种方法我可以用来从文件中加载我想要的数据部分,那将是理想的,但据我所知,我认为这是不可能的。这是正确的吗?

无论如何,对于如何解决这个非常普遍的问题,我们将不胜感激!

从Github找到答案。在numpy中,有一个名为memmap的函数,它适用于我正在做的事情。

samples = np.memmap("hexdump_samples", mode="r", dtype=np.int16)[100:159]

这似乎并没有导致我使用的较小数据集出现任何问题,但我无法想象这会导致较大文件的内存出现任何问题。据我所知,这不会引起任何问题。

这取决于你的计算机硬件,你有多少RAM。Python是一种有很多保护措施的解释语言,但我不会冒险尝试用Python打开那个文件。我建议使用C或C++,它们适合大量的数据和内存管理。然后,您可以将数据解析为一口大小的块,每个块可能为16MB。与C.相比,Python速度非常慢,内存效率低下

最新更新