将数组放入表列

时间:2013-10-10 17:34:59

标签: pytables

我正在尝试将信息存储在pytables子类中。我有我的类Record和子类Data。 Record的每一行都有很多行。我不想在row.append()中使用循环,因为它似乎非常慢。我可以创建一个数组并将其放在Data.v列中吗?怎么样?

import tables as tbs
import numpy as np

class Record(tbs.IsDescription):
    filename  = tbs.StringCol(255)
    timestamp = tbs.Time32Col()
    class Data(tbs.IsDescription):
        v = tbs.Int32Col(dflt=None)

...
row = table.row
for each in importdata:
    row['filename'] = each['filename']
    row['timestamp'] = each['timestamp']

    # ???? I want to do something like this
    row.Data = tbs.Array('v', each['v'], shape=np.shape(each['v']))
    row.append()

2 个答案:

答案 0 :(得分:2)

好的,当我读到嵌套表时,我会考虑一对多情况下的关系数据。嵌套表无法做到这一点。相反,我只是使用

创建了一个单独的表并存储了行引用
tables.nrows

获取我的数据表的当前行。这对我有用,因为对于Record I中的每个条目,我都可以计算将存储在Data中的行数。我只需要知道起始行。我将来不会修改/插入/删除任何行,所以我的引用不会改变。任何考虑这种技术的人都应该理解它带来的重大限制。

答案 1 :(得分:0)

嵌套列使用列键中的“/”分隔符。所以我认为你只需要更改一行:

row.Data = tbs.Array('v', each['v'], shape=np.shape(each['v']))

以下内容:

row['Data/v'] = each['v']