簡體   English   中英

Python:將二進制文件解壓縮為二維數組並給出長度錯誤

[英]Python: Unpacking binary file into a 2-d array and giving a length error

我正在嘗試從二進制格式的文件中讀取數據並將其存儲在二維數組中。 但是,我收到一條錯誤消息:

error: unpack requires a bytes object of length 2

基本上我擁有的是像

import os, struct
from itertools import chain

packets = value1  #The number of packets in the data stream
dataLength = value2 #bytes of data per packet

packHeader = [[0 for x in range(14)] for y in range(packets)]
data = [[0 for x in range(dataLength)] for y in range(packets)]

for i in range(packets):
    packHeader[i][0] = struct.unpack('>H', file.read(2))
    packHeader[i][1] = struct.unpack('>H', file.read(2))
    ....
    packHeader[i][13] = struct.unpack('>i', file.read(4))
    packHeader[i]=list(chain(*packHeader[i])) #Deals with the tuple issue ((x,),(y,),...) -> (x,y,...)
    for j in range(dataLength):
        data[i][j] = struct.unpack('<h', file.read(2))

當到達這一點時,將產生上面的錯誤。 我不知道為什么。 dataLengthpackets都是偶數。 因此,想象一下一次解壓縮2個字節不是問題。 有什么想法嗎?

編輯我確實檢查過一次,如果一次讀入一個字節,會發生什么情況。 所以

data[i][j] = struct.unpack('<b', file.read(1))

而且效果很好。 只是不喜歡拆開其他任何東西。

編輯2我也繼續說了些類似的話,使它更加緊湊

data[i] = [struct.unpack('<h', file.read(2)) for j in range(dataLength)]

仍然會產生相同的錯誤-更緊湊。

事實證明,仍然存在要執行的迭代,即一次讀取2個字節(或更多)時,文件中的數據用盡。 解決方法是執行以下操作

readBytes = value_wanting_to_be_read
dataLength = int(value2/readBytes)

然后在實際循環中

data[i] = [struct.unpack('<h', file.read(readBytes)) for j in range(dataLength)]

如果readBytes = 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM