0
バイナリ形式のファイルからデータを読み込み、2次元配列に格納しようとしています。しかし、私は私が持っているもの基本的にPython:バイナリファイルを2次元配列に展開して長さエラーを返す
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バイトをアンパックすることは問題ではないはずです。何かご意見は?
EDIT一度に1バイトずつデータを読み込むとどうなるか確認しました。したがって
data[i][j] = struct.unpack('<b', file.read(1))
とうまくいきました。それはただ他のものを解凍するのが好きではありません。
私もちょうど先に行って、まだ同じエラーが発生し
data[i] = [struct.unpack('<h', file.read(2)) for j in range(dataLength)]
のようなものを言っているもう少しコンパクトに2 EDIT - ちょうどよりコンパクトに。