[英]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))
當到達這一點時,將產生上面的錯誤。 我不知道為什么。 dataLength
和packets
都是偶數。 因此,想象一下一次解壓縮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.