[英]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.