Python 3.x 在Python Pytables中自动创建多个数据集

Python 3.x 在Python Pytables中自动创建多个数据集,python-3.x,numpy,append,data-science,pytables,Python 3.x,Numpy,Append,Data Science,Pytables,在我的脚本中,我手动创建了几个数据集: import tables dset1 = f.create_earray(f.root, "dataset1", atom=tables.Float64Atom(), shape=(0, 2)) dset2 = f.create_earray(f.root, "dataset2", atom=tables.Float64Atom(), shape=(0, 2)) dset3 = f.

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

    import tables
    dset1 = f.create_earray(f.root, "dataset1", atom=tables.Float64Atom(), shape=(0, 2))
    dset2 = f.create_earray(f.root, "dataset2", atom=tables.Float64Atom(), shape=(0, 2))
    dset3 = f.create_earray(f.root, "dataset3", atom=tables.Float64Atom(), shape=(0, 2))
    ...
我想实现两件事:

  • 自动执行上述语句,以循环方式执行并创建任何所需的(N)数据集

  • 然后我还按顺序使用
    .append
    方法(如下所示),我还希望自动执行该方法:

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

  • 非常感谢您的帮助。

    如果没有更多细节,很难提供具体的建议。如果已经有了NumPy数组,那么可以在一次调用中使用数据创建array(使用
    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") 
    
    如果在创建数据集时没有数组,可以在第一个循环中创建耳环,然后在第二个循环中添加np.array数据。见下文:

    with tb.File('SO_64397597.h5','w') as h5f:
        
        for cnt in range(1,4):
            h5f.create_earray("/", "dataset"+str(cnt), atom=tables.Float64Atom(), shape=(0, 2))
    
            # get array data...
            arr_list = [arr1, arr2, arr3]
            # add array data
            for cnt in range(1,4):
                h5f.get_node("/","dataset"+str(cnt)).append(arr_list[cnt-1]) 
    

    令人惊叹的。因此,我在创建时没有数组,在回答的最后一块(代码)之后也没有数组。如何引用要附加的已创建数据集?例如,如果你看我上面的问题,我将它们称为
    dset1
    dset2
    。。。我尝试了
    name=f'dset{cnt}'
    然后
    name=h5f.create\u array…
    但是没有成功,有什么建议吗?如果你知道数据集名称,你可以使用
    h5f.get\u node(where,name)
    以该名称返回对象<代码>其中可以是完整路径(
    名称
    不需要),或者
    其中
    可以是组路径,并且
    名称
    是必需的。这将获取名称为dataset{cnt}的数据集:
    h5f.get_节点(“/”,“dataset”+str(cnt))