如何检查 Python 中的 .h5 文件

How to inspect .h5 file in Python

如何查看给定的 .h5 文件在 Python 中有哪些变量、数据集等?

我可以通过运行这个

读取文件
import h5py
f = h5py.File(filename, 'r')

我现在如何查看我的 .h5 文件有哪些变量?

运行 f.keys() 输出非信息性

KeysView(<HDF5 file filename (mode r)>)

在 Matlab 中我只是调用 h5disp(filename) 但想知道如何在 Python

你尝试了吗?

print(list(f.keys()))

这应该会为您提供 hdf5 文件中的所有组。如果 f 是一个组,您可以对数据集执行相同的操作。

也许有点矫枉过正,但我​​有这个,可能对某人有用:

from __future__ import print_function

def scan_hdf5(path, recursive=True, tab_step=2):
    def scan_node(g, tabs=0):
        print(' ' * tabs, g.name)
        for k, v in g.items():
            if isinstance(v, h5.Dataset):
                print(' ' * tabs + ' ' * tab_step + ' -', v.name)
            elif isinstance(v, h5.Group) and recursive:
                scan_node(v, tabs=tabs + tab_step)
    with h5.File(path, 'r') as f:
        scan_node(f)

简单输入:

>>> scan_hdf5('/tmp/dummy.h5')
/
   - /d1
   /g1
     - /g1/d2
     - /g1/d3
   /g2
     - /g2/d4
     /g2/g3
       - /g2/g3/d5

或者 returns 元素的替代版本 可用 :

def scan_hdf52(path, recursive=True, tab_step=2):
    def scan_node(g, tabs=0):
        elems = []
        for k, v in g.items():
            if isinstance(v, h5.Dataset):
                elems.append(v.name)
            elif isinstance(v, h5.Group) and recursive:
                elems.append((v.name, scan_node(v, tabs=tabs + tab_step)))
        return elems
    with h5.File(path, 'r') as f:
        return scan_node(f)

与 returns:

>>> scan_hdf5_2('/tmp/dummy.h5')
[u'/d1',
 (u'/g1', [u'/g1/d2', u'/g1/d3']),
 (u'/g2', [u'/g2/d4', (u'/g2/g3', [u'/g2/g3/d5'])])]

我在尝试找出一种方法来显示 h5 文件中的每个节点以便能够仅提取具有相应数据集的所需节点时遇到了这个问题。

我认为这非常简单但易于理解(对我来说)片段:

h5 = h5py.File(filename, 'r')
def hierarchy(d):
    for item in d:
        if ' 0 member' in str(d[item]):
            print(d[item].name, ['empty group'])
        if isinstance(d[item], h5py.Group):
            hierarchy(d[item])
        else: #Dataset
            print(d[item].name, ['dataset'])
hierarchy(h5)

因此我将在 GUI 应用程序中使用它,我将启用仅选择 'dataset' 个标记的项目。