web-dev-qa-db-fra.com

Découverte de clés à l'aide de h5py en python3

Dans python2.7, Je peux analyser un hdf5 fichiers que les clés utilisent

$ python
>>> import h5py
>>> f = h5py.File('example.h5', 'r')
>>> f.keys()
[u'some_key']

Cependant, dans python3.4, J'obtiens quelque chose de différent:

$ python3 -q
>>> import h5py
>>> f = h5py.File('example.h5', 'r')
>>> f.keys()
KeysViewWithLock(<HDF5 file "example.h5" (mode r)>)

Qu'est-ce que KeysViewWithLock et comment puis-je examiner mes clés HDF5 en Python3?

19
user14717

Depuis le site Web de h5py ( http://docs.h5py.org/en/latest/high/group.html#dict-interface-and-links ):

Lorsque vous utilisez h5py à partir de Python 3, les méthodes keys (), values ​​() et items () renvoient des objets de type vue au lieu de listes. Ces objets prennent en charge les tests et l'itération de conteneur, mais peuvent ' t être tranché comme des listes.

Cela explique pourquoi nous ne pouvons pas les visualiser. La réponse la plus simple est de les convertir en liste:

>>> list(for.keys())

Malheureusement, j'exécute des choses dans iPython, et il utilise la commande "l". Cela signifie que cette approche ne fonctionnera pas.

Afin de les visualiser réellement, nous devons profiter des tests et de l'itération des conteneurs. Les tests de porte-conteneurs signifient que nous devons déjà connaître les clés, c'est donc fini. Heureusement, il est simple d'utiliser l'itération:

>>> [key for key in f.keys()]
['mins', 'rects_x', 'rects_y']

J'ai créé une fonction simple qui le fait automatiquement:

def keys(f):
    return [key for key in f.keys()]

Vous obtenez alors:

>>> keys(f)
['mins', 'rects_x', 'rects_y']
36
Joel