我目前正在阅读每个150,000 kb的二进制文件。它们包含大约3,000个结构化二进制消息,我试图找出处理它们的最快方法。在每条消息中,我只需要实际读取大约30行数据。这些消息有标题,允许我跳转到消息的特定部分并找到我需要的数据。
我正在试图弄清楚是否更有效地解压整个消息(每个50 kb)并从生成的元组中提取数据,其中包含我实际上不需要的大量数据,或者是否会降低成本使用seek来查找每条消息所需的每行数据并解压掉这30行中的每一行?或者,这是否更适合mmap?
答案 0 :(得分:1)
在仅仅50 kB的范围内进行几次尝试可能是不值得的:系统调用非常昂贵。取而代之的是,将每条消息读入一个bytes
中,并使用切片方式“寻找”所需的偏移量并获取正确数量的数据。
将bytes
包裹在memoryview
中以避免复制可能是有益的,但是对于小的个人阅读而言,这可能无关紧要。如果可以使用memoryview
,请务必尝试使用mmap
,它会在整个文件中显示类似的界面。如果您使用的是struct
,则其unpack_from
可以在bytes
或mmap
中进行搜索,而无需包装或复制。