web-dev-qa-db-ja.com

Python3でh5pyを使用してキーを検出する

python2.7では、キーが使用するhdf5ファイルを分析できます

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

ただし、python3.4では、別の結果になります。

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

KeysViewWithLockとは何ですか。Python3でHDF5キーを確認するにはどうすればよいですか?

19
user14717

H5pyのウェブサイトから( http://docs.h5py.org/en/latest/high/group.html#dict-interface-and-links ):

Python 3のh5pyを使用すると、keys()、values()、items()メソッドはリストではなくビューのようなオブジェクトを返します。これらのオブジェクトはコンテナシップのテストと反復をサポートしていますが、リストのようにスライスする。

これは、それらを表示できない理由を説明しています。最も簡単な答えは、それらをリストに変換することです:

>>> list(for.keys())

残念ながら、私はiPythonで物事を実行し、それはコマンド 'l'を使用します。つまり、そのアプローチは機能しません。

それらを実際に表示するには、コンテナーシップのテストと反復を利用する必要があります。コンテナーシップのテストでは、キーを既に知っている必要があるので、それは終わりです。幸い、反復を使用するのは簡単です。

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

これを自動的に行う簡単な関数を作成しました。

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

それからあなたは得る:

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