[英]HDF5 file to dictionary
我有以下格式的 hdf5 文件。 {...}
代表組,有些有子組。 使用以下鏈接下載文件
https://drive.google.com/file/d/1f6a0XEPGE4aSEKODVbJ1Q9AUw24Bt9_2/view?usp=sharing
{'A': np.array(...),
'B':np.array(...),
'C':{
'A': np.array(...),
'B': {...},
'C': np.array(...),
'D': np.array(...)},
'D':{
'A': {...},
'B': {...},
'C': {...},
'D': {...}}
}
我正在嘗試使用以下代碼創建字典,但格式不正確。 有人可以幫忙嗎?
import h5py
import numpy as np
driv
def read_hdf5_file(file):
for key,val in file.items():
if type(val) == h5py._hl.dataset.Dataset:
d[key] = np.array(val)
# print(key,np.array(val))
else:
d[key] = read_hdf5_file(val)
return d
if __name__=='__main__':
d = dict()
file = h5py.File("data.hdf5")
read_hdf5_file(file)
這是一個非常簡單的示例,展示了如何使用.visititems()
遞歸迭代 object 樹中的所有對象(數據集和組)並返回數據集名稱和 h5py 對象的字典(其中名稱是完整路徑)。 不幸的是.visititems()
不像生成器。 如果有return
或yield
它將退出。 為此,您必須將.visititems()
“包裝”在作為您的生成器的 function 中。 這並不難,只是更多的參與。 (或者使用 PyTables ......它有一組很棒的“walk”方法可以做到這一點。)
下面的代碼(警告:顯示它在做什么很冗長。)
def get_ds_dictionaries(name, node):
fullname = node.name
if isinstance(node, h5py.Dataset):
# node is a dataset
print(f'Dataset: {fullname}; adding to dictionary')
ds_dict[fullname] = node
print('ds_dict size', len(ds_dict))
else:
# node is a group
print(f'Group: {fullname}; skipping')
with h5py.File('data.hdf5','r') as h5f:
ds_dict = {}
print ('**Walking Datasets to get dictionaries**\n')
h5f.visititems(get_ds_dictionaries)
print('\nDONE')
print('ds_dict size', len(ds_dict))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.