我想将大型二进制文件(5GB)解析为python框架。该文件包含应放入不同数据帧的不同程序包。每个包都包含c类型变量。这些文件中的数据已损坏,因此分析必须可靠。
我已经成功编写了一个解析器,但是速度很慢。我用struct.unpack
逐包解析,并将数据附加到每种包类型的列表中。解析完成后,我将从列表中创建数据帧。
随着文件大小的增长,将列表转换为数据帧会花费越来越多的时间。
将数据首先放在列表中,然后再将它们放入数据框似乎效率很低。此外,当我确切地知道每列是什么c类型时,让pandas处理类型似乎不太好。
为每个列预分配一个具有正确类型的大数据框,然后在解析时填充它是否有意义?在c中分配和填充数组是否值得,而不是以某种方式包装数据框? 还是有一种优雅的方式将迭代器传递给熊猫并让它处理所有事情?我已经研究过诸如read_csv之类的熊猫解析函数,但是它看起来是如此复杂,以至于我完全迷失了。
任何帮助将不胜感激
有关二进制文件的更多信息:
数据打包如下:
h0
h1
id
size
data
checksum
其中h0
和h1
是标头字节,id
是决定数据进入哪个数据帧的包ID,size
是数据大小,{{1 }}是数据,由不同的c类型(uint8,float等)组成。