簡體   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