我一直在使用以下代码打开一些 HDF5 文件,这些文件在 MATLAB 中使用 H5PY 在 python 中生成:
import h5py as h5
data='dataset.mat'
f=h5.File(data, 'r')
但是我收到以下错误:
OSError: Unable to open file (File signature not found)
我已检查我尝试打开的文件是 7.3 版 MAT 文件并且是 HDF5 格式。事实上,我之前已经使用 H5PY 成功打开过相同的文件。我已经确认这些文件存在并且可以访问,所以我不确定错误来自哪里。任何建议将不胜感激,在此先感谢:)
最佳答案
通常消息找不到文件签名
表示:
1.您的文件已损坏。
...是我认为最有可能的。你说你以前打开过文件。也许您忘记关闭可能损坏文件的文件句柄。
尝试使用 HDF5 实用程序 h5debug
检查文件(如果您在操作系统上安装了 hdf5 库,则可在命令行上使用,在 Linux 上使用 dpkg -s libhdf5-dev
检查)。
<强>2。该文件不是 HDF5 格式。
这是您的错误消息的已知原因。但是,既然你说你确定,情况就是这样,而且你之前已经打开过文件,我给出这个仅供引用,以供可能在这里遇到问题的其他人引用:
自 2015 年 12 月起(从 7.3 版开始),Matlab 文件在其 MAT-File Level 5 Containers 中使用基于 HDF5 的格式。 (更多 doc)。 scipy
库支持早期版本的 MAT 文件(v4(1.0 级)、v6 和 v7 到 7.2)并且可以使用该库读取:
import scipy.io
f = scipy.io.loadmat('dataset.mat')
否则你可以尝试其他方法,看看错误是否仍然存在:
PyTables 是 h5py 的替代品,可以找到 here .
import tables
file = tables.open_file('test.mat')
使用安装
pip install tables
如果您安装了 matlab,Python MATLAB 引擎 是读取 MAT 文件的替代方法。可在此处找到文档:MATLAB Engine API for Python .
import matlab.engine
mat = matlab.engine.start_matlab()
f = mat.load("dataset.mat", nargout=1)
关于python - 在 H5PY 中打开文件时出错(未找到文件签名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089950/