繁体   English   中英

Python阅读二进制文件:如何解压缩大量数字?

[英]Python read binary: how to unpack a large number of numbers?

基本上我想读取一个包含大量双打的二进制文件。 不确定如何实现以下目标:

N=10000000
fin=open("sth.bin","rb")
data = struct.unpack('dddddd......',fin.read(8*N)) #of course not working, but this is what I want
fin.close()

遍历文件,一次解压缩大块:

with open("sth.bin", "rb") as f:
    numbers = [
        struct.unpack('d', chunk)[0]
        for chunk in iter(lambda: f.read(8), "")
    ]

您可以在此处进行大量优化-一次读取较大的文件块(通常理想的是4096字节)并创建编译的Struct-但这是总的想法。 如果性能特别重要,那么您也可以一次解压缩多个double(例如, struct.unpack('d' * 8, chunk) ),以减少函数调用的次数:

numbers = []
struct_4096 = struct.Struct("d" * 4096 / 8)
with open("sth.bin", "rb") as f:
    while True:
        chunk = f.read(4096)
        try:
            numbers.extend(struct_4096.unpack(chunk))
        except struct.error:
            numbers.extend(struct.unpack("d" * len(chunk) / 8))

结构支持计数的格式,例如下面的代码将解压缩100个双打:

import struct
struct.unpack("100d", string)

如果您要处理大量的双打,建议您使用numpy:

np.fromfile(f, dtype=float, count=100)

将根据文件创建一个100个double数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM