web-dev-qa-db-fra.com

Erreur lors de l'ouverture du fichier dans H5PY (signature de fichier introuvable)

J'ai utilisé le bit de code suivant pour ouvrir certains fichiers HDF5, produits dans MATLAB, en python en utilisant H5PY:

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

Cependant, j'obtiens l'erreur suivante:

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

J'ai vérifié que les fichiers que j'essaie d'ouvrir sont des fichiers MAT version 7.3 et sont au format HDF5. En fait, j'ai utilisé H5PY pour ouvrir les mêmes fichiers avec succès auparavant. J'ai confirmé que les fichiers existent et sont accessibles, donc je ne sais pas vraiment d'où vient l'erreur. Tout conseil serait grandement apprécié, merci d'avance:)

23
Anisha Singh

Habituellement, le message File signature not found indique soit:

1. Votre fichier est corrompu.

... est ce que je pense être le plus probable. Vous avez dit avoir déjà ouvert les fichiers. Peut-être avez-vous oublié de fermer votre descripteur de fichier qui peut corrompre le fichier. Essayez de vérifier le fichier avec l'utilitaire HDF5 h5debug (disponible en ligne de commande si vous avez installé la lib hdf5 sur votre OS, vérifiez avec dpkg -s libhdf5-dev sous Linux).

2. Le fichier n'est pas au format HDF5.

Il s'agit d'une cause connue de votre message d'erreur. Mais puisque vous avez dit que vous vous êtes assuré que c'est le cas et que vous avez déjà ouvert les fichiers, je donne ceci juste pour référence pour d'autres qui peuvent tomber ici:

Depuis décembre 2015 (à partir de la version 7.3), les fichiers Matlab utilisent le format basé sur HDF5 dans leurs conteneurs MAT-File Level 5 (plus doc ). Les fichiers MAT des versions antérieures (v4 (niveau 1.0), v6 et v7 à 7.2) sont pris en charge par et peuvent être lus avec la bibliothèque scipy:

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

Sinon, vous pouvez essayer d'autres méthodes et voir si l'erreur persiste:

PyTables est une alternative à h5py et se trouve ici .

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

Le moteur Python MATLAB est une alternative à la lecture des fichiers MAT, si matlab est installé. La documentation se trouve ici: API du moteur MATLAB pour Python .

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

J'étais confronté au même problème avec mon fichier .h5. Et le problème était que je ne téléchargeais pas correctement le fichier .h5.

Je faisais filename.h5-> right_click-> enregistrer le lien sous, qui ne téléchargeait pas le fichier correctement (ou peut-être que le fichier était corrompu). Au lieu de cela, j'ai téléchargé le fichier en: sélectionnant la case à cocher avec filename.h5 et cliqué sur télécharger et après cela mon code a fonctionné.

Cela peut aider ceux qui font la même erreur.

2
fateh

Cela se produit généralement lorsque les fichiers sont corrompus. J'ai rencontré ce problème et j'ai téléchargé à nouveau le fichier et cela résout les problèmes.

0
Dharmendra Singh