Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中检查.h5文件_Python_Matlab_Python 3.x_H5py - Fatal编程技术网

如何在Python中检查.h5文件

如何在Python中检查.h5文件,python,matlab,python-3.x,h5py,Python,Matlab,Python 3.x,H5py,如何查看给定的.h5文件在Python中包含哪些变量、数据集等 我可以通过运行此命令读取文件 import h5py f = h5py.File(filename, 'r') 我现在如何查看.h5文件中包含哪些变量 运行f.keys() KeysView(<HDF5 file filename (mode r)>) KeysView() 在Matlab中,我只调用h5disp(filename),但想知道如何在Python中实现它您尝试过吗 print(list(f.keys(

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

我可以通过运行此命令读取文件

import h5py
f = h5py.File(filename, 'r')
我现在如何查看.h5文件中包含哪些变量

运行
f.keys()

KeysView(<HDF5 file filename (mode r)>)
KeysView()
在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
或以更有用的形式返回元素的替代版本:

有回报:

>>> 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文件中的每个节点时遇到了这个问题,以便能够仅提取具有相应数据集的想要的节点

我认为这是一个非常简单但容易理解的(对我来说)片段:


因此,我将在GUI应用程序中使用它,我将只启用选择“dataset”标记的项。

这是必需的,因为在Python3中,f.keys()返回和迭代器,应该显式展开为列表。它输出“['#refs#'、“var1”、“var2”、“var3”、“var4”]“refs”是什么意思?我建议你看看里面有什么。据我们判断,它是hdf5文件中的一个组,但如果不提供关于它是如何创建的(您可能没有)更多信息,则很难判断。如果您希望获得用于调试的键列表,也可以这样做:
keys=[key for key in f.keys()]
你在使用python3吗?是的………那么@Astrom建议的解决方案应该对python3有所帮助,python3是一个
字典。keys()
提供了一个“KeyView”,它必须用
列表展开(或者可以直接在迭代中使用)。
>>> 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 = 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)