web-dev-qa-db-ja.com

H5PYでファイルを開くときにエラーが発生しました(ファイルの署名が見つかりません)

次のコードを使用して、MATLABで作成されたHDF5ファイルを開きます。python using 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を使用して同じファイルを正常に開くことができました。ファイルが存在し、アクセス可能であることを確認したので、エラーがどこから来たのか本当にわかりません。アドバイスは大歓迎です、事前に感謝します:)

23
Anisha Singh

通常、メッセージFile signature not foundは次のいずれかを示します。

1。ファイルが破損しています。

...が最も可能性が高いと思います。以前にファイルを開いたと言っていました。ファイルを破損する可能性のあるファイルハンドルを閉じるのを忘れたのかもしれません。 HDF5ユーティリティでファイルを確認してくださいh5debug(OSにhdf5 libをインストールした場合、コマンドラインで利用可能です。dpkg -s libhdf5-dev Linuxの場合)。

2。ファイルはHDF5形式ではありません。

これは、エラーメッセージの既知の原因です。しかし、あなたは、これが事実であり、あなたが以前にファイルを開いたことを確認したと言ったので、ここでつまずくかもしれない他の人のための参考のためにこれを与えています:

2015年12月(バージョン7.3の時点)以降、Matlabファイルは MAT-File Level 5 Containers (more 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 Engineは、matlabがインストールされている場合、MATファイルを読み取るための代替手段です。ドキュメントは次の場所にあります: MATLAB Engine API for Python

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

.h5ファイルでも同じ問題に直面していました。問題は、.h5ファイルを正しくダウンロードしていないことでした。

Filename.h5-> right_click-> save linkを実行しましたが、ファイルを正しくダウンロードしていませんでした(またはファイルが破損している可能性があります)。それをする代わりに、ファイルを次のようにダウンロードしました。filename.h5のチェックボックスを選択し、ダウンロードをクリックして、その後コードが機能しました。

これは、同じ間違いをしている人の助けになるかもしれません。

2
fateh

通常、これはファイルが破損したときに発生します。私はこの問題に直面し、ファイルを再度ダウンロードし、問題を解決しました。

0