首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python库获取h5文件中的所有键及其层次结构h5py

使用python库获取h5文件中的所有键及其层次结构h5py
EN

Stack Overflow用户
提问于 2020-01-24 13:09:05
回答 3查看 3K关注 0票数 8

有任何方法可以使用python h5递归地获取h5py文件中的所有键吗?我试着使用下面的代码

代码语言:javascript
复制
import h5py

h5_data = h5py.File(h5_file_location, 'r')
print(h5_data.keys())

但是它只打印h5文件的顶级键。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-24 14:13:10

keys()在组上返回的一些键可能是数据集,有些可能是子组。为了找到所有的密钥,您需要恢复组。下面是一个简单的脚本:

代码语言:javascript
复制
import h5py

def allkeys(obj):
    "Recursively find all keys in an h5py.Group."
    keys = (obj.name,)
    if isinstance(obj, h5py.Group):
        for key, value in obj.items():
            if isinstance(value, h5py.Group):
                keys = keys + allkeys(value)
            else:
                keys = keys + (value.name,)
    return keys

h5 = h5py.File('/dev/null', 'w')
h5.create_group('g1')
h5.create_group('g2')
h5.create_dataset('d1', (10,), 'i')
h5.create_dataset('d2', (10, 10,), 'f')
h5['g1'].create_group('g1')
h5['g1'].create_dataset('d1', (10,), 'i')
h5['g1'].create_dataset('d2', (10,), 'f')
h5['g1/g1'].attrs['a'] = 'b'
print(allkeys(h5))

给出:

代码语言:javascript
复制
('/', '/d1', '/d2', '/g1', '/g1/d1', '/g1/d2', '/g1/g1', '/g2')
票数 8
EN

Stack Overflow用户

发布于 2020-01-24 13:21:58

您可能需要遍历键来返回它们的值。下面是一个简单的函数。

代码语言:javascript
复制
import h5py

h5_file_location = '../../..'
h5_data = h5py.File(h5_file_location, 'r')

def keys(f):
    return [key for key in f.keys()]
print(keys(h5_data))
票数 1
EN

Stack Overflow用户

发布于 2022-07-28 15:18:22

基于最上面的答案,我编写了这个函数,只返回所有底层键:

代码语言:javascript
复制
def allbottomkeys(obj):
bottomkeys=[]
def allkeys(obj):
    keys = (obj.name,)
    if isinstance(obj, h5py.Group):
        for key, value in obj.items():
            if isinstance(value, h5py.Group):
                keys = keys + allkeys(value)
            else:
                keys = keys + (value.name,)
                bottomkeys.append(value.name)
    return keys
allkeys(obj)
return bottomkeys
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59897093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档