表示任意层次数据的最佳数据结构是什么?

2024-04-25 22:49:11 发布

您现在位置:Python中文网/ 问答频道 /正文

表示/读取具有任意数量子级的分层数据(如文件夹/文件布局)的最佳数据结构是什么?我见过N元树和尝试,k/d元堆等等。。。但是,您似乎至少需要知道每个节点在这些结构中的最大子节点数。然而,是否有任何一种结构可以表示任何层次化数据,而不知道它在某种程度上是层次化的?我不太担心优化以获得如此好的性能,因为我不认为我需要处理大量的数据(如果可以优化,那么就非常好),重要的方面是能够读入一些随机的层次数据并维护所述数据的组织

#example data

root
   - group1
      - subgroup1
         - child
         - child
             - data
      - subgroup2
      - subgroup3
         - child
             - data
   - group2
      - subgroup1
   - group3
      - subgroup1
         - child
             - data
      - subgroup2
         - child
             - data
   - group4
      - subgroup1
      - subgroup2
      - subgroup3
      - subgroup4

同样,格式可以是任意的,可能有0-500个组,每个组具有任意数量的嵌套子级/路径

关于上下文,如果需要更多信息:

我希望能够阅读任何h5文件的布局,而不必专门为h5文件编码,也不必严格按照相同的布局组织每个h5文件。这样我就可以创建一个GUI,用户可以在其中浏览h5文件(我正在与不太熟悉编程的科学家合作,他们希望尽可能地自动化/拥有GUI)。我已经研究了h5py和pandas,但是通过这些库获取键并不能以一种易于使用的方式对它们进行排序/返回以表示文件布局(pandas返回h5文件布局的叶节点,h5py在每个层次中读取,您需要事先知道键,因此很难遍历和组织文件布局)。到目前为止,我能够解析键、组和子组等。。。从h5文件中获取这些库,但我无法维护路径。为此,使用嵌套元组似乎太复杂和混乱,这就是为什么我想知道其他更复杂的数据结构

另外,我需要用Python来做这件事,因为它是我的同事们唯一使用的语言,他们不想学习其他语言(不是出于无知,他们只是不是程序员……)


Tags: 文件数据路径child数据结构data数量节点
1条回答
网友
1楼 · 发布于 2024-04-25 22:49:11

为了演示我关于自我描述的意思,这里有一个非常简单的示例,它使用.visititems()递归地访问层次结构中的每个HDF5对象。修改以在h5py.File()调用中引用您的文件,您可以看到输出。您将获得两个列表,其中包含组和数据集名称,可用于填充GUI

注意:.visititems()如果返回值,则递归结束。如果要在main()例程中迭代模式,则需要创建一个生成器,并在运行时生成名称

def get_h5_grps_dsets(name, h5_obj):
    
    if isinstance(h5_obj,h5py.Group):
        #print(name,'is a Group')
        grp_list.append(name)
    elif isinstance(h5_obj,h5py.Dataset):
        #print(name,'is a Dataset')
        ds_list.append(name)

with h5py.File(file_path, 'r') as h5r:
    
    grp_list = []
    ds_list = []    
    
    h5r.visititems(get_h5_grps_dsets)
    print('\nGroups:')
    for grp in grp_list:
        print(grp)
    print('\nDatasets:')
    for ds in ds_list:
        print(ds)   

相关问题 更多 >