MatLab与Python二进制文件读取

mzsu5hc0  于 2022-11-15  发布在  Matlab
关注(0)|答案(2)|浏览(201)

我有一个可以读取.bin文件并解析数据的MATLAB应用程序。我正在尝试将此脚本从MATLAB转换为Python,但在读取的值中发现了差异。
在MATLAB脚本中使用的Read函数是:

fname = 'file.bin';
f=fopen(fname);
data = fread(f, 100);
fclose(f);

我尝试的Python转换是:(编辑)

fname = 'file.bin'
with open(fname, mode='rb') as f:
    data= list(f.read(100))

然后,我将打印读取字节与它们的索引的并排比较,并发现两者之间存在差异。通过执行$ hexdump -n 100 -C file.bin并在应用程序HexEdit上查看文件内容,我已经确认了在Python中读取的值是正确的。
如果您能深入了解这两个项目之间差异的根源,以及我如何解决这个问题,我将不胜感激。
注意:我正在尝试只使用内置的Python库来解决这个问题。

解决方案:在编程语言之间使用不正确的文件路径/结构。

ruyhziif

ruyhziif1#

正如MATLAB所做的那样,Python自动将单字节转换为无符号整数,因此您只需执行以下操作。

fname = 'file.bin'
with open(fname, mode='rb') as f:
    bytes_arr = f.read(100)
    # Conversion for visual comparison purposes
    data = [x for x in bytes_arr]
print(data)

同样欢迎使用python,bytes是内置类型,所以请不要重写内置的bytes类型...否则你会遇到意想不到的问题。
编辑:正如@juanpa.arrivilaga所指出的,您可以使用更快的

fname = 'file.bin'
with open(fname, mode='rb') as f:
    bytes_arr = f.read(100)
    # Conversion for visual comparison purposes
    data = list(bytes_arr)
n53p2ov0

n53p2ov02#

使用NumPy对matlab代码的准确翻译如下:

data = np.frombuffer(f.read(100), dtype=np.uint8).astype(np.float64)

相关问题