2016-06-29 34 views
9

Sto usando il seguente pezzo di codice per aprire alcuni file HDF5, prodotti in MATLAB, in pitone con H5PY:Errore apertura del file in H5PY (firma File non trovato)

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

Tuttavia io sono ottenere il seguente errore:

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

ho controllato che i file che sto cercando di aprire la versione 7.3 sono MAT-file e sono in formato HDF5. In effetti ho usato H5PY per aprire gli stessi file con successo prima. Ho confermato che i file esistono e sono accessibili, quindi non sono davvero sicuro da dove provenga l'errore. Qualche consiglio sarebbe molto apprezzato, grazie in anticipo:)

risposta

1

Di solito il messaggio indica un File signature not found:

1. Il file è danneggiato.

... è quello che penso sia più probabile. Hai detto che hai già aperto i file. Forse hai dimenticato di chiudere il tuo file-handle che può corrompere il file. Prova a controllare il file con l'utilità HDF5 h5debug (disponibile sulla riga di comando se hai installato la libreria hdf5 sul tuo sistema operativo, controlla con dpkg -s libhdf5-dev su Linux).

2. Il file non è nel formato HDF5.

Questa è una causa nota per il messaggio di errore. Ma dal momento che hai detto di esserti assicurato, che questo è il caso e che hai già aperto i file, ti sto dando questo solo per riferimento per altri che potrebbero inciampare qui:

Da dicembre 2015 (dalla versione 7.3) , I file Matlab utilizzano il formato basato su HDF5 nel loro MAT-File Level 5 Containers (altro doc). Versione precedente MAT-files (v4 (livello 1.0), V6 e V7 a 7,2) sono supportati da e possono essere letti con la scipy libreria:

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

Altrimenti si può provare altri metodi e vedere se il errore persiste:

PyTables è un'alternativa a h5py e si trova here.

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

Python MATLAB Engine è un'alternativa per leggere i file MAT, se avete installato MATLAB. La documentazione è disponibile qui: MATLAB Engine API for Python.

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