J'ai un fichier h5py qui stocke des tableaux numpy, mais j'ai Object doesn't exist error
lorsque je tente de l'ouvrir avec le nom du jeu de données dont je me souviens. Est-il donc possible de répertorier les jeux de données du fichier?
with h5py.File('result.h5','r') as hf:
#How can I list all dataset I have saved in hf?
Vous devez utiliser la méthode des clés. Cela vous donnera une liste de chaînes unicode de vos noms de groupe de données et de groupe. Par exemple:
Datasetnames=hf.keys()
Une autre méthode basée sur l’interface graphique consisterait à utiliser HDFView. https://support.hdfgroup.org/products/Java/release/download.html
Si vous voulez lister les noms de clé, vous devez utiliser la méthode keys () qui vous donne un objet key, puis utilisez la méthode list () pour lister les clés:
with h5py.File('result.h5','r') as hf:
dataset_names = list(hf.keys())
Juste pour montrer le nom des jeux de données sous-jacents, je voudrais simplement utiliser h5dump -n <filename>
C'est sans exécuter un script Python.
Les autres réponses vous expliquent simplement comment créer une liste des clés sous le groupe racine, qui peut faire référence à d'autres groupes ou ensembles de données.
Si vous voulez quelque chose de plus proche de h5dump mais en python, vous pouvez faire quelque chose comme ça:
import h5py
def descend_obj(obj,sep='\t'):
"""
Iterate through groups in a HDF5 file and prints the groups and datasets names and datasets attributes
"""
if type(obj) in [h5py._hl.group.Group,h5py._hl.files.File]:
for key in obj.keys():
print sep,'-',key,':',obj[key]
descend_obj(obj[key],sep=sep+'\t')
Elif type(obj)==h5py._hl.dataset.Dataset:
for key in obj.attrs.keys():
print sep+'\t','-',key,':',obj.attrs[key]
def h5dump(path,group='/'):
"""
print HDF5 file metadata
group: you can give a specific group, defaults to the root group
"""
with h5py.File(path,'r') as f:
descend_obj(f[group])