代码之家  ›  专栏  ›  技术社区  ›  Jason S

如果指定的组不存在,是否可以使用Pytables来创建该组;如果存在,是否打开现有的组?

  •  0
  • Jason S  · 技术社区  · 7 年前

    PyTabes有一个 create_group 方法来创建组,但仅当组不存在时才有效。

    我看不到 open_group 方法(属性访问方法除外,如 h5file.root.g1.g2 哪个可以进入这个小组 /g1/g2 );如果组不存在,是否有一种干净的创建组的方法,如果存在,是否返回现有组?

    2 回复  |  直到 7 年前
        1
  •  1
  •   kcw78    7 年前

    Jason,这是一个小代码片段,演示了 createparents 与…争论 create_table() 方法及 File.__contains__(path) 检查3个不同的组名并打印结果。

    import tables as tb
    import numpy as np
    h5f = tb.open_file('SO_54080906.h5','w')
    
    ds_dtype = np.dtype([('a',float),('b',float),('c',float)])
    arr = np.array(np.arange(30.0).reshape(10,3))
    recarr = np.core.records.array(arr,dtype=ds_dtype)
    
    #create agroup at root level
    h5f.create_group(h5f.root, 'agroup')
    
    #create dataset 1 at root.bgroup level
    dataset1 = h5f.create_table('/bgroup', 'dataset1',
                                createparents=True, obj=recarr )
    
    for grpname in ['/agroup', '/bgroup' , '/cgroup']:
        if h5f.__contains__(grpname) :
          print ('found path for:', grpname)
        else:
          print ('path doesnt exist for:', grpname)
    
    h5f.close()
    

    输出如下:

    found path for: /agroup
    found path for: /bgroup
    path doesnt exist for: /cgroup
    
        2
  •  0
  •   Jason S    7 年前

    我最后用了 createparents 像这样做:

    def createGroup(self, path):
        try:
            return self.hfile.get_node(path)
        except pt.NoSuchNodeError:
            parent, nodename = path.rsplit('/',1)
            if parent == '':
                parent = '/'
            return self.hfile.create_group(parent, nodename, createparents=True)