在Python-Pytables中自动创建多个数据集

问题描述

在我的脚本中,我手动创建了几个数据集:

    import tables
    dset1 = f.create_earray(f.root,"dataset1",atom=tables.Float64Atom(),shape=(0,2))
    dset2 = f.create_earray(f.root,"dataset2",2))
    dset3 = f.create_earray(f.root,"dataset3",2))
    ...

我想实现两件事:

  1. 使以上语句自动化以循环方式执行并创建任何所需的(N)个数据集

  2. 然后我也按顺序使用.append方法(如下所示),我也想实现自动化:

     dset1.append(np_array1) 
     dset2.append(np_array2) 
     dset3.append(np_array3) 
     ...
    

将感谢您的帮助吗?

解决方法

如果没有更多细节,很难提供具体建议。如果已经有了NumPy数组,则可以在一次调用中使用数据创建EArray(使用obj=参数)。这是一个小代码段,显示了如何循环执行此操作。

import tables as tb
import numpy as np

with tb.File('SO_64397597.h5','w') as h5f:
    
    arr1  = np.ones((10,2))
    arr2  = 2.*np.ones((10,2))
    arr3  = 3.*np.ones((10,2))
    arr_list = [arr1,arr2,arr3]
    for cnt in range(1,4):
        h5f.create_earray("/","dataset"+str(cnt),obj=arr_list[cnt-1])

上面的代码不会创建数据集对象。如果需要它们,可以通过以下调用以编程方式访问:

# input where as path to node,name not required
ds = h5f.get_node("/dataset1")
# or
# input where as path to group,and name as dataset name
ds = h5f.get_node("/","dataset1") 

如果在创建数据集时没有数组,则可以在第一个循环中创建EArray,然后在第二个循环中添加np.array数据。见下文:

with tb.File('SO_64397597.h5','w') as h5f:
    
    for cnt in range(1,atom=tables.Float64Atom(),shape=(0,2))

        # get array data...
        arr_list = [arr1,arr3]
        # add array data
        for cnt in range(1,4):
            h5f.get_node("/","dataset"+str(cnt)).append(arr_list[cnt-1])