我确实尝试了很多方法来寻找这种疑问,但是也许是因为我从不使用二进制文件,直到我不知道搜索相似内容的关键字可以帮助我什么时候。这就是为什么我在这里问。
所以,我有一个文件:
path = 'myPath/file.pd0'
in_file = open(path, "rb")
read_file = in_file.read()
type(read_file)
当我尝试检查read_file里面有什么内容时:
b'\x7f\x7f\xcc\x05\x00\x0f$\x00`\x00\xa2\x00$\x02\xe6\x02\xa8\x03\xd0\x032\x04d\x04\x96\x04\xa6\x04\xe0\x04'
read_file的类型为字节。当我尝试使用struct时,因为它是函数,人们建议我得到以下错误:
import struct
struct.unpack('hhl', read_file[0:30])
error: unpack requires a buffer of 16 bytes
无论我解压缩什么fmt,都需要一个n字节的缓冲区。
我尝试读取的文件结构定义如下:
标题 (6个字节+ [2 x数据类型数])
固定领导者数据 (60个字节)
可变领导者数据 (66字节)
关联度 (每个深度单元2个字节+ 4个字节)
有什么主意,我该如何开始使用struct或类似的python命令读取这些字节?
谢谢
答案 0 :(得分:1)
unpack()
期望字节是其第一个参数描述的格式的确切长度。
格式字符串'hhl'
描述了16个字节的数据(在您的计算机上-见下文),因此您必须传递16个字节的字符串。
如果您只想解析部分字节,则可以执行以下操作:
fmt = 'hhl'
size = struct.calcsize(fmt)
struct.unpack(fmt, data[:size])
此外,您的格式字符串没有byte order, size and alignment specifier。默认情况下假定为“本机”。这意味着您的代码是与系统有关的,这可能不是解析文件格式所需要的。 您可能需要为文件的不同部分使用不同的对齐方式。