2016-06-29 2 views
9

Ich habe das folgende Stück Code wurde unter Verwendung einiger HDF5-Dateien zu öffnen, in MATLAB erzeugt, in Python mit H5PY:Fehler beim Öffnen der Datei in H5PY (File Signatur nicht gefunden)

import h5py as h5 
data='dataset.mat' 
f=h5.File(data, 'r') 

aber ich bin die folgende Fehlermeldung erhalten:

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

ich habe überprüft, dass die Dateien, die ich versuche, Version 7.3 MAT-Dateien zu öffnen sind und HDF5 Format. In der Tat habe ich H5PY verwendet, um die gleichen Dateien erfolgreich zuvor zu öffnen. Ich habe bestätigt, dass die Dateien existieren und zugänglich sind, so dass ich nicht wirklich sicher bin, woher der Fehler kommt. Jede Beratung wäre sehr dankbar, Dank im Voraus:)

Antwort

1

Normalerweise ist die Nachricht File signature not found zeigt entweder:

1. Ihre Datei beschädigt ist.

... ist, was ich denke, ist am wahrscheinlichsten. Du hast gesagt, du hast die Dateien schon einmal geöffnet. Vielleicht haben Sie vergessen, Ihre Datei zu schließen, die die Datei beschädigen kann. Versuchen Sie, die Datei mit dem HDF5-Dienstprogramm zu überprüfen h5debug (verfügbar in der Befehlszeile, wenn Sie die hdf5-lib auf Ihrem Betriebssystem installiert haben, überprüfen Sie mit dpkg -s libhdf5-dev auf Linux).

2. Die Datei ist nicht im HDF5-Format.

Dies ist eine bekannte Ursache für Ihre Fehlermeldung. Aber da Sie gesagt haben, dass dies der Fall ist und Sie die Dateien schon einmal geöffnet haben, gebe ich dies nur als Referenz für andere, die hier stolpern könnten:

Seit Dezember 2015 (ab Version 7.3) , Matlab-Dateien verwenden das HDF5-basierte Format in ihrem MAT-File Level 5 Containers (mehr doc). Frühere Version MAT-Dateien (v4 (Stufe 1.0), v6 und v7 bis 7,2) werden unterstützt durch und können mit der scipy Bibliothek gelesen werden:

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

Ansonsten können Sie andere Methoden versuchen und sehen, ob die Fehler bleibt:

PyTables ist eine Alternative zu h5py und wird gefunden here.

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

Python MATLAB-Engine ist eine alternative MAT-Dateien zu lesen, wenn Sie Matlab installiert haben. Dokumentation finden Sie hier: MATLAB Engine API for Python.

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