我有一个带有以下标题的二进制文件:4字节字符串,1字节编号,然后是4字节uint32编号。
我能理解这一点吗?
sbet_data[0:3]
是字符串,sbet_data[4:5]
是1字节数,那么4字节uint32号有多长?我在哪里可以找到相应字节大小与格式的良好图表,例如我也想知道8字节的大小(uint64)。
sbet_file = open('abc.dat')
sbet_data = sbet_file.read()
s = struct.Struct('4s b I')
unpacked_data = s.unpack(sbet_data[0:12])
答案 0 :(得分:4)
您需要以二进制模式打开文件,并从文件中只读取12个字节:
import struct
with open('abc.dat', 'rb') as fobj:
byte_string, n1, n4 = struct.unpack('4sbI', fobj.read(12))
您将获得一个字节字符串。假设它是ASCII,你可以像这样解码:
my_string = byte_string.decode('ascii')
struct
的文档包含tables of format strings。
根据其中一个表格,uint64
为L
。
答案 1 :(得分:2)
我相信你正试图从二进制文件中提取信息。那么这将有效
import struct
import numpy as np
buffer = np.random.bytes(12)
s = struct.Struct('4sbI')
unpacked_data = s.unpack(buffer)
print unpacked_data[0], unpacked_data[1], unpacked_data[2]
在这种情况下,unpacked_data[0]
将是字符串,unpacked_data[1]
将是1字节数字,4字节整数将是unpacked_data[2]
。
请记住,如果您想提高速度,还可以使用numpy来使用np.ndarray构造函数解压缩数据。