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

用python索引非常大的十六进制文件,python,Python,我正试图编写一个程序,从一个(非常)大的文件中解析数据,该文件甚至包含8行16位十六进制值集。例如,一行将如下所示: edfc b600 edfc 2102 81fb 0000 d1fe 0eff 数据文件应该在1-4 TB之间,所以我不确定最好的方法是什么。如果我使用Python的open()函数加载这个文件,结果会很糟糕吗?我担心如果我加载这么大的文件只是为了索引,这会对我的记忆造成多大的影响。或者,如果有一种方法可以用来从文件中加载我想要的数据部分,那将是理想的,但据我所知,我认为这是不

我正试图编写一个程序,从一个(非常)大的文件中解析数据,该文件甚至包含8行16位十六进制值集。例如,一行将如下所示:

edfc b600 edfc 2102 81fb 0000 d1fe 0eff
数据文件应该在1-4 TB之间,所以我不确定最好的方法是什么。如果我使用Python的open()函数加载这个文件,结果会很糟糕吗?我担心如果我加载这么大的文件只是为了索引,这会对我的记忆造成多大的影响。或者,如果有一种方法可以用来从文件中加载我想要的数据部分,那将是理想的,但据我所知,我认为这是不可能的。这是正确的吗


无论如何,对于如何处理这个非常普遍的问题,我们将非常感激

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

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

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

这似乎不会对我使用的较小数据集造成任何问题,但我无法想象这会对较大文件的内存造成任何问题。据我所知,这不会引起任何问题。

以二进制模式从文件中读取某些字节范围肯定有通用方法,但更有用的是,您希望的文件格式是什么?您展示的十六进制转储文件实际上并没有建立任何东西-任何文件内容都可以用这种方式表示。或者您是说该文件实际上是一个包含十六进制转储文件的ascii文件?为了得到您显示的行,您是否运行了某种十六进制转储实用程序,或者这只是文件内容的一个简单视图?