我试图从二进制格式的文件中读取数据,并将其存储在二维数组中。但是,我得到一个错误
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 = 2
,它就可以工作。你知道吗相关问题 更多 >
编程相关推荐