【发布时间】:2018-10-11 09:12:05
【问题描述】:
我目前正在读取每个 150,000 kb 的二进制文件。它们包含大约 3,000 条结构化二进制消息,我正在尝试找出处理它们的最快方法。在每条消息中,我实际上只需要读取大约 30 行数据。这些消息的标题允许我跳转到消息的特定部分并找到我需要的数据。
我试图弄清楚解压整个消息(每条 50 kb)并从包含大量我实际上并不需要的数据的结果元组中提取我的数据是否更有效,还是成本更低使用 seek 转到每条消息所需的每一行数据并解压缩这 30 行中的每一行?或者,这是否更适合 mmap?
【问题讨论】:
-
30“行”是什么意思?数据是二进制的,所以行没有多大意义。你能用每条消息的百分比来表示吗?此外,除非百分比接近 100% 或 0%,否则您可能需要进行分析才能获得有用的答案。
-
对不起,你说得对,一点都不清楚。 30 个 8 字节的二进制段。
-
它们在整个消息中是如何分布的?它们是随机放置的,还是都在一个区域中,还是介于两者之间?
-
它们遵循固定的结构,尽管消息在消息之间的大小是一致的,但它们可能因文件而异。我的计划是读取消息的标题以确定大小并构建格式字符串来解包整个消息,然后从元组中提取数据。或者,我可以使用消息标头找出需要跳过多少字节才能到达我想要阅读的消息部分,然后我可以解压缩该单个二进制数据以检索变量。
-
我只是不确定跳过消息来解包 30 个整数是否会比解包数百个整数的单个解包操作慢。
标签: python python-3.x binary-data