2016-06-29 38 views
9

我一直在使用使用了下面的代碼位打開一些HDF5文件,在MATLAB產生,在蟒蛇H5PY:錯誤H5PY打開文件(未找到文件簽字)

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

通常情況下,消息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') 

Python的MATLAB引擎是一種替代閱讀MAT文件,如果你已經安裝了MATLAB。文檔在這裏找到:MATLAB Engine API for Python

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