簡體   English   中英

HDF5 文件到字典

[英]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()不像生成器。 如果有returnyield它將退出。 為此,您必須將.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM