MATLAB与Python二进制文件读取



我有一个MATLAB应用程序,读取。bin文件并通过数据进行解析。我正试图将此脚本从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库来解决这个问题。

<<p>解决方案/strong>:在编程语言之间使用不正确的文件路径/结构。实现@juanpa。arrivillaga的建议清晰地再现了MATLAB结果。

使用NumPy的MATLAB代码的准确翻译将是:

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

python自动将单个字节转换为无符号整数,与matlab一样,因此您只需执行以下操作。

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指出的。Arrivillaga你可以用更快的

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