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

新手上路,请多包涵

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

 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 成功打开过相同的文件。我已经确认这些文件存在并且可以访问,所以我不确定错误的来源。任何建议将不胜感激,提前致谢:)

原文由 Anisha Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.3k
1 个回答

通常消息 File signature not found 表示:

1. 您的文件已损坏。

……我觉得可能性最大。你说你以前打开过文件。也许您忘记关闭可能损坏文件的文件句柄。尝试使用 HDF5 实用程序 h5debug 检查文件(如果您在操作系统上安装了 hdf5 库,则在命令行上可用,在 Linux 上使用 dpkg -s libhdf5-dev 检查)。

2.文件不是HDF5格式。

这是您的错误消息的已知原因。但是既然你说你确定是这种情况并且你之前已经打开过文件,那么我给出这个只是供其他可能在这里绊倒的人参考:

自 2015 年 12 月(从版本 7.3 开始),Matlab 文件在其 MAT 文件级别 5 容器 中使用基于 HDF5 的格式(更多 文档)。早期版本的 MAT 文件(v4(1.0 级)、v6 和 v7 到 7.2)受 scipy 库支持并可以读取:

 import scipy.io
f = scipy.io.loadmat('dataset.mat')


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

PyTables 是 h5py 的替代品,可在 此处 找到。

 import tables
file = tables.open_file('test.mat')

安装使用

pip install tables

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

 import matlab.engine
mat = matlab.engine.start_matlab()
f = mat.load("dataset.mat", nargout=1)

原文由 Honeybear 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题