Ich versuche Daten aus einer Datei im Binärformat einzulesen und in einem 2-d-Array zu speichern. Allerdings bin ich erhalte eine Fehlermeldung, diePython: Entpacke Binärdatei in ein 2-d-Array und gebe einen Längenfehler ein
error: unpack requires a bytes object of length 2
Wesentlichen liest, was ich habe, ist so etwas wie
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))
Wenn es zu diesem Punkt wird es über den Fehler erzeugt. Ich bin mir nicht sicher warum. Sowohl dataLength
als auch packets
sind gerade Zahlen. Also, vorgestellten Entpacken von 2 Bytes zu einem Zeitpunkt sollte kein Problem sein. Irgendwelche Gedanken?
BEARBEITEN Ich habe überprüft, was passieren würde, wenn ich die Daten Byte für Byte einlese. Also
data[i][j] = struct.unpack('<b', file.read(1))
und das hat gut funktioniert. Es gefällt einfach nicht, etwas anderes auszupacken.
EDIT 2 ich auch voraus ging einfach und gemacht, dass etwas kompakter durch so etwas wie
data[i] = [struct.unpack('<h', file.read(2)) for j in range(dataLength)]
Noch erzeugt die gleiche Fehlermeldung, - nur kompakter.