【问题标题】:How do I traverse a hdf5 file using h5py如何使用 h5py 遍历 hdf5 文件
【发布时间】:2015-09-17 16:59:51
【问题描述】:

如何使用 h5py 遍历一个 hdf5 文件的所有组和数据集?

我想使用 for 循环或类似的方法从公共根目录检索文件的所有内容。

【问题讨论】:

    标签: h5py


    【解决方案1】:

    这是一个相当老的线程,但我找到了一个基本上在 Python 中复制 h5ls 命令的解决方案:

    class H5ls:
        def __init__(self):
            # Store an empty list for dataset names
            self.names = []
    
        def __call__(self, name, h5obj):
            # only h5py datasets have dtype attribute, so we can search on this
            if hasattr(h5obj,'dtype') and not name in self.names:
                self.names += [names]
    
    
            # we have no return so that the visit function is recursive
    
    if __name__ == "__main__":
        df = h5py.File(filename,'r')
        h5ls = H5ls()
        # this will now visit all objects inside the hdf5 file and store datasets in h5ls.names
        df.visititems(h5ls) 
    
        df.close() 
    

    此代码将遍历整个 HDF5 文件,并将所有数据集存储在 h5ls.names 中,希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      嗯,这是一个旧线程,但我想我还是会做出贡献。这就是我在类似情况下所做的。 对于这样设置的数据结构:

      [group1]
          [group2]
              dataset1
              dataset2
          [group3]
              dataset3
              dataset4
      

      我用过:

      datalist = []
      def returnname(name):
          if 'dataset' in name and name not in datalist:
              return name
          else:
              return None
      looper = 1
      while looper == 1:
          name = f[group1].visit(returnname)
          if name == None:
              looper = 0
              continue
          datalist.append(name)
      

      我还没有找到 os.walk 的 h5py 等效项。

      【讨论】:

        【解决方案3】:

        visit()visititems() 是你的朋友。参照。 http://docs.h5py.org/en/latest/high/group.html#Group.visit。请注意,h5py.File 也是 h5py.Group。示例(未测试):

        def visitor_func(name, node):
            if isinstance(node, h5py.Dataset):
                 # node is a dataset
            else:
                 # node is a group
        
        with h5py.File('myfile.h5', 'r') as f:
            f.visititems(visitor_func)
        

        【讨论】:

        • 没有很好的文档记录,但是如果访问函数(例如visitor_func)返回一个非None的值,那么循环将终止。
        猜你喜欢
        • 2012-05-03
        • 2012-01-19
        • 2020-08-19
        • 2014-12-24
        • 2015-04-09
        • 2022-10-19
        • 2021-09-30
        • 2016-03-29
        • 2018-01-02
        相关资源
        最近更新 更多