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))
当它到达这一点时会产生上面的错误。我不确定为什么。 dataLength
和 packets
都是偶数。所以,想象一次解包 2 个字节应该不是问题。有什么想法吗?
EDIT 我确实检查过如果我一次读取一个字节的数据会发生什么。所以
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
.
有效
我正在尝试从二进制格式的文件中读取数据并将其存储在二维数组中。但是,我收到一条错误消息
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 我确实检查过如果我一次读取一个字节的数据会发生什么。所以
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
.