有没有一种方法可以使用PyTables创建指定的组(如果尚不存在),或者打开现有的组(如果存在)?

时间:2019-01-07 19:53:21

标签: python hdf5 pytables

PyTables具有create_group方法来创建组,但是仅在该组不存在时才有效。

我没有看到open_group方法(除了h5file.root.g1.g2中的按属性访问方法可以访问组/g1/g2之外);如果组不存在,有没有一种干净的方法创建组,但是如果存在,则返回现有组?

2 个答案:

答案 0 :(得分:1)

Jason,这是一个小代码段,演示了使用function displayTableData() { // when cell onclick - show cell index and contents var myTable = document.getElementById('t02'); var totalRows = document.getElementById('t02').rows.length; var totalCol = myTable.rows[0].cells.length; document.getElementById(‘td01’).onclick=myFunction5(y); var newCellid = y.CellIndex // return cell id } 方法的createparents参数和create_table()来检查3个不同的组名和打印结果。

File.__contains__(path)

输出看起来像这样:

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()

答案 1 :(得分:0)

我最终使用了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)