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