我正在尝试在Python中读取一个二进制文件(该文件表示Matlab中的矩阵)。但是我在读取文件并将字节转换为正确值方面遇到了麻烦。
该二进制文件由一系列4字节数字组成。前两个数字分别是行数和列数。我的朋友给了我一个他写的Matlab函数,使用fwrite完成此操作。我想做类似这样的事情:
但是当我使用f.read(4)时,我得到像'\ x00 \ x00 \ x00 \ x04'这样的东西(这个特定的示例应该表示一个4),我无法弄清楚如何将其转换为正确的数字(使用int,hex或类似的任何内容都不起作用)。我偶然发现了struct.unpack,但那似乎没有什么帮助。
该二进制文件由一系列4字节数字组成。前两个数字分别是行数和列数。我的朋友给了我一个他写的Matlab函数,使用fwrite完成此操作。我想做类似这样的事情:
f = open(filename, 'rb')
rows = f.read(4)
cols = f.read(4)
m = [[0 for c in cols] for r in rows]
r = c = 0
while True:
if c == cols:
r += 1
c = 0
num = f.read(4)
if num:
m[r][c] = num
c += 1
else:
break
但是当我使用f.read(4)时,我得到像'\ x00 \ x00 \ x00 \ x04'这样的东西(这个特定的示例应该表示一个4),我无法弄清楚如何将其转换为正确的数字(使用int,hex或类似的任何内容都不起作用)。我偶然发现了struct.unpack,但那似乎没有什么帮助。
这是一个示例矩阵和相应的二进制文件(当我使用python函数f.read()读取整个文件而没有任何大小参数时):Matlab函数为其创建:
4 4 2 4
2 2 2 1
3 3 2 4
2 2 6 2
'\x00\x00\x00\x04\x00\x00\x00\x04@\x80\x00\x00@\x00\x00\x00@@\x00\x00@\x00\x00\x00@\x80\x00\x00@\x00\x00\x00@@\x00\x00@\x00\x00\x00@\x00\x00\x00@\x00\x00\x00@\x00\x00\x00@\xc0\x00\x00@\x80\x00\x00?\x80\x00\x00@\x80\x00\x00@\x00\x00\x00'
因为矩阵是4x4的,所以前4个字节和第5-8个字节都应该是4。然后应该是4,4,2,4,2,2,2,1等等...
谢谢大家!
struct
模块是你的好朋友。可能需要一点时间来适应它,但它是一个非常强大的工具。 - Nick Bastin