web-dev-qa-db-ja.com

h5pyファイルのすべてのデータセットをリストする方法は?

Numpy配列を格納するh5pyファイルがありますが、Object doesn't exist error覚えているデータセット名で開こうとすると、ファイルのデータセットを一覧表示できる方法はありますか?

   with h5py.File('result.h5','r') as hf:
        #How can I list all dataset I have saved in hf?
15
matchifang

Keysメソッドを使用する必要があります。これにより、データセットとグループ名のUnicode文字列のリストが表示されます。例えば:

Datasetnames=hf.keys()

別のGUIベースの方法は、HDFViewを使用することです。 https://support.hdfgroup.org/products/Java/release/download.html

5
max9111

キー名を一覧表示する場合は、キーオブジェクトを提供するkeys()メソッドを使用する必要があります。次に、list()メソッドを使用してキーを一覧表示します。

with h5py.File('result.h5','r') as hf:
    dataset_names = list(hf.keys())
6
Chris

他の答えは、ルートグループの下にあるキーのリストを作成する方法を説明するだけで、他のグループまたはデータセットを参照する場合があります。

あなたがh5dumpに近いものを望んでいるが、Pythonでは、あなたはそのようなことをすることができます:

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])
2
Seb

最上位のグループの下にリストしたいが、ツリーを降りるための独自のコードを書きたくない場合は、visit()関数を試してください。

with h5py.File('result.h5','r') as hf:
    hf.visit(print)

または、より高度なもの(属性情報を含めるなど)には、visititemsを使用します。

def printall(name, obj):
    print(name, dict(obj.attrs))

with h5py.File('result.h5','r') as hf:
    hf.visititems(printall)
1
jasondet

基礎となるデータセットの名前を示すために、単にh5dump -n <filename>

pythonスクリプトを実行しない場合です。

1
Haramoz