Python:将二进制文件解包到一个2d数组中并给出一个长度

2024-04-26 22:51:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从二进制格式的文件中读取数据,并将其存储在二维数组中。但是,我得到一个错误

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))

当它到达这一点时,就会产生上面的错误。我不知道为什么。dataLengthpackets都是偶数。所以,一次解包2个字节应该不是问题。有什么想法吗?你知道吗

编辑我检查了一下,如果每次读取一个字节的数据,会发生什么。所以呢

data[i][j] = struct.unpack('<b', file.read(1))

而且效果很好。它只是不喜欢打开任何其他东西。你知道吗

编辑2我也只是继续说了一些

data[i] = [struct.unpack('<h', file.read(2)) for j in range(dataLength)]

仍然产生相同的错误-只是更紧凑。你知道吗


Tags: ofinimportforreaddatabytes错误
1条回答
网友
1楼 · 发布于 2024-04-26 22:51:20

事实证明,当每次读取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,它就可以工作。你知道吗

相关问题 更多 >