在H5PY中打开文件时出错(未找到文件签名)

Ani*_*ngh 23 python matlab h5py

我一直在使用以下代码来打开一些HDF5文件,在MATLAB中使用H5PY在python中生成:

import h5py as h5
data='dataset.mat'
f=h5.File(data, 'r')
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

OSError: Unable to open file (File signature not found)
Run Code Online (Sandbox Code Playgroud)

我已经检查过我要打开的文件是版本7.3 MAT文件并且是HDF5格式.事实上,我之前使用H5PY成功打开了相同的文件.我已经确认文件存在且可访问,因此我不确定错误的来源.任何建议将不胜感激,提前感谢:)

Raj*_*jat 10

我的 .h5 文件也面临同样的问题。问题是我没有正确下载 .h5 文件。

我正在执行 filename.h5->right_click->save link as,这没有正确下载文件(或者可能是文件已损坏)。我没有这样做,而是将文件下载为:选中带有 filename.h5 的复选框,然后单击下载,之后我的代码就开始工作了。

也许这可以帮助那些犯同样错误的人。


Hon*_*ear 8

通常,该消息File signature not found指示:

1.您的文件已损坏。

我认为是最有可能的。您说过您已经打开过文件。也许您忘了关闭可能损坏文件的文件句柄。尝试使用HDF5实用程序检查文件h5debug(如果已在操作系统上安装了hdf5 lib,则可在命令行上找到,请dpkg -s libhdf5-dev在Linux上进行检查)。

2.该文件不是HDF5格式。

这是您的错误消息的已知原因。但是,既然您说了确定,就是这种情况,并且您之前已经打开过文件,所以我仅供参考,以供其他可能会在这里绊倒的人参考:

自2015年12月(从7.3版开始),Matlab文件在其MAT文件第5级容器中使用基于HDF5的格式(更多doc)。该scipy库支持较早版本的MAT文件(v4(1.0版),v6和v7至7.2):

import scipy.io
f = scipy.io.loadmat('dataset.mat')
Run Code Online (Sandbox Code Playgroud)

否则,您可以尝试其他方法,看看错误是否仍然存在:

PyTablesh5py的替代方法,可在此处找到。

import tables
file = tables.open_file('test.mat')
Run Code Online (Sandbox Code Playgroud)

使用安装

pip install tables
Run Code Online (Sandbox Code Playgroud)

如果已安装matlab,则Python MATLAB Engine是读取MAT文件的替代方法。可在此处找到文档:适用于Python的MATLAB Engine API

import matlab.engine
mat = matlab.engine.start_matlab()
f = mat.load("dataset.mat", nargout=1)
Run Code Online (Sandbox Code Playgroud)