HDF5 fichier créé avec h5py ne peut pas être ouvert par h5py
J'ai créé un HDF5 fichier apparemment sans problème sous Ubuntu 12.04 (version 32 bits), en utilisant comme Anaconda Python de la distribution et de l'écriture dans ipython notebook. Les données sous-jacentes sont tous les tableaux numpy. Par exemple,
import numpy as np
import h5py
f = h5py.File('myfile.hdf5','w')
group = f.create_group('a_group')
group.create_dataset(name='matrix', data=np.zeros((10, 10)), chunks=True, compression='gzip')
Si je tente d'ouvrir ce fichier à partir d'un nouveau iypthon ordinateur portable, cependant, je reçois un message d'erreur:
f = h5py.File('myfile.hdf5', "r")
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
<ipython-input-4-b64ac5089cd4> in <module>()
----> 1 f = h5py.File(file_name, "r")
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in __init__(self, name, mode, driver, libver, userblock_size, **kwds)
220
221 fapl = make_fapl(driver, libver, **kwds)
--> 222 fid = make_fid(name, mode, userblock_size, fapl)
223
224 Group.__init__(self, fid)
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in make_fid(name, mode, userblock_size, fapl, fcpl)
77
78 if mode == 'r':
---> 79 fid = h5f.open(name, h5f.ACC_RDONLY, fapl=fapl)
80 elif mode == 'r+':
81 fid = h5f.open(name, h5f.ACC_RDWR, fapl=fapl)
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/h5f.so in h5py.h5f.open (h5py/h5f.c:1741)()
IOError: Unable to open file (Unable to find a valid file signature)
Pouvez-vous me dire ce qu'il manque des fichier de signature est? Ai-je raté quelque chose quand j'ai créé le fichier?
Avez-vous
Il est souvent recommandé lors de l'écriture ou de fichiers (à l'aide de n'importe quel fichier constructeur, et pas seulement h5py) pour utiliser le
Aussi, avez-vous vraiment besoin de créer l'ensemble de ces variables dans votre jeu de données pour générer cette erreur? Obtenez-vous le même message d'erreur si vous créez une seule de ces variables?
Vous aviez raison, je n'ai oublier de
Super! Je ne sais pas beaucoup au sujet de iPython ordinateurs portables, mais basée sur cette erreur, je suppose qu'ils utilisent le même interprète (noyau/session). Cette page a une discussion de séparer le noyau de l'ordinateur portable, ce qui est probablement à propos de votre problème; c'est à dire peut-être que vous êtes à l'aide de l'api cahiers avant ce changement? Ces types de choses qui ont pu être documentés dans la réponse que vous fournissez.
f.close()
votre écriture fichier avant d'essayer de l'ouvrir à nouveau? Aussi, votre exemple de code n'est pas exécutable: les variables Mfrgroup
, fgroup_ID
, pos
, Msgroup
sgroup_ID
et names
ne sont pas définis.Il est souvent recommandé lors de l'écriture ou de fichiers (à l'aide de n'importe quel fichier constructeur, et pas seulement h5py) pour utiliser le
with
de l'instruction. Par exemple with h5py.File('myfile.hdf5', 'w') as f:
. Ce qu'il fait en sorte que vous n'avez pas explicitement fermez le fichier. D'autre part, il est difficile de déboguer le fichier I/O interactive.Aussi, avez-vous vraiment besoin de créer l'ensemble de ces variables dans votre jeu de données pour générer cette erreur? Obtenez-vous le même message d'erreur si vous créez une seule de ces variables?
Vous aviez raison, je n'ai oublier de
f.close()
le fichier! J'ai l'habitude d'utiliser le with
déclaration, mais cette fois suivi un tutoriel et bien sûr oublié que... voulez-vous écrire une réponse, ou devrais-je? Ou est-il un autre moyen de marquer cette question comme résolue?Super! Je ne sais pas beaucoup au sujet de iPython ordinateurs portables, mais basée sur cette erreur, je suppose qu'ils utilisent le même interprète (noyau/session). Cette page a une discussion de séparer le noyau de l'ordinateur portable, ce qui est probablement à propos de votre problème; c'est à dire peut-être que vous êtes à l'aide de l'api cahiers avant ce changement? Ces types de choses qui ont pu être documentés dans la réponse que vous fournissez.
OriginalL'auteur Lilith-Elina | 2014-10-28
Vous devez vous connecter pour publier un commentaire.
Depuis que nous avons résolu la question dans les commentaires sur ma question, je suis en train d'écrire les résultats ici de le marquer comme résolu.
Le principal problème était que j'ai oublié de fermer le fichier après je l'ai créé. Il y aurait eu deux options simples, soit:
ou, mon préféré, car le fichier est automatiquement fermée:
.h5
fichier à partir de l'EPA. (de sorte qu'il contenait de l'EPA des métadonnées au lieu de HDF de données). Bon à savoir sur les autres sources de ce problème.Merci! Il est toujours bon de savoir ce que provoque le même message d'erreur.
J'ai pris une première approche comme ci-dessous mais toujours la même erreur vient comme mentionné dans le post. laissez-moi vous montrer mon code... importer h5py f = h5py.Fichier(weight_path, mode='r') flattened_layers = modèle.couches nb_layers = f.attrs['nb_layers'] for k in range(nb_layers): g = f['layer_{}'.format(k)] poids = [g['param_{}'.format(p)] p in range(g.attrs['nb_params'])] si non poids: poursuivre f.close()
Peut-être que vous devriez poster que comme une question séparée, comme votre code est très difficile à lire de cette façon.
OriginalL'auteur Lilith-Elina