如何查看Python中给定.h5文件中的变量,数据集等?
我可以通过运行此
来阅读该文件import h5py
f = h5py.File(filename, 'r')
我现在如何查看我的.h5文件中包含哪些变量?
运行f.keys()
输出无信息
KeysView(<HDF5 file filename (mode r)>)
在Matlab中我只是调用h5disp(filename)但想知道如何在Python中执行它
答案 0 :(得分:4)
你试过吗?
print(list(f.keys()))
这应该会给你hdf5文件中的所有组。如果f是一个组,则可以对数据集执行相同的操作。
答案 1 :(得分:2)
也许是矫枉过正,但我有这个并且可能对某人有用:
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
或者以更多可用:
的形式返回元素的替代版本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)
带回报:
>>> 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'])])]
答案 2 :(得分:1)
我在试图找到一种在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应用程序中使用它,我将仅选择“数据集”标记的项目。