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

时间:2016-06-29 03:36:02

标签: python matlab h5py

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

OSError: Unable to open file (File signature not found)

但是我收到以下错误:

var newWin = nw.Window.open('app/newWin/newWin.html', {
    new_instance: true
}, function () {
    // opened
    console.log("opened");
});

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

4 个答案:

答案 0 :(得分:4)

通常消息File signature not found表示:

<强> 1。您的文件已损坏。

......我认为最有可能。你说你之前打开过这些文件。也许你忘了关闭文件句柄,这可能会破坏文件。 尝试使用HDF5实用程序h5debug检查文件(如果您在操作系统上安装了hdf5 lib,请在命令行上提供,请在Linux上查看dpkg -s libhdf5-dev)。

<强> 2。该文件不是HDF5格式。

这是导致错误消息的已知原因。但既然你说你已经确定了,就是这种情况而且之前你已经打开过这些文件,我只是为了这个可能偶然发现的其他人提供参考:

自2015年12月起(从7.3版开始),Matlab文件在其MAT-File Level 5 Containers(更多doc)中使用基于HDF5的格式。早期版本MAT文件(v4(级别1.0),v6和v7至7.2)受scipy库支持并可以阅读:

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

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

PyTables 是h5py的替代品,可以找到here

import tables
file = tables.openFile('test.mat')
如果安装了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)

答案 1 :(得分:2)

.h5文件遇到相同的问题。问题是我没有正确下载.h5文件。

我正在执行filename.h5-> right_click->链接另存为,但未正确下载文件(或者文件可能已损坏)。我没有这样做,而是下载了文件:选择了filename.h5复选框,然后单击下载,然后我的代码起作用了。

这可能会对犯同样错误的人有所帮助。

答案 2 :(得分:0)

通常在文件损坏时会发生这种情况。我遇到了这个问题,然后再次下载了文件,它解决了问题。

答案 3 :(得分:0)

如果Jupyter中有人遇到此问题,您只需单击文件的复选框,然后单击下载按钮。
我从here获得的解决方案对我有所帮助,希望对您有帮助。