有任何方法可以使用python h5递归地获取h5py文件中的所有键吗?我试着使用下面的代码
import h5py
h5_data = h5py.File(h5_file_location, 'r')
print(h5_data.keys())但是它只打印h5文件的顶级键。
发布于 2020-01-24 14:13:10
keys()在组上返回的一些键可能是数据集,有些可能是子组。为了找到所有的密钥,您需要恢复组。下面是一个简单的脚本:
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))给出:
('/', '/d1', '/d2', '/g1', '/g1/d1', '/g1/d2', '/g1/g1', '/g2')发布于 2020-01-24 13:21:58
您可能需要遍历键来返回它们的值。下面是一个简单的函数。
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))发布于 2022-07-28 15:18:22
基于最上面的答案,我编写了这个函数,只返回所有底层键:
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 bottomkeyshttps://stackoverflow.com/questions/59897093
复制相似问题