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

标签 python matlab h5py

我一直在使用以下代码打开一些 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/

相关文章:

python - Python中连续变量的Renyi分歧

python - 使用 XML 响应处理 GET 请求

python - 正则表达式帮助 - python - 从 css 中提取所有图像 url

matlab - 在 for-loop Matlab 中分配图例

python - Elasticsearch过滤条件不起作用?

matlab - 袋外误差是如何准确计算的,它的含义是什么?

python - 读取 .m 文件并且 Python 不断读取 .m 文件中的字符作为一行?

python - 在 python 中打开和读取 .mat 文件的问题

python - 用于读取行的最佳 HDF5 数据集 block 形状

python - 将HDF5文件读入numpy数组