如何在PyTable中存储数组或字符串列表?

时间:2015-02-16 22:29:33

标签: python database hdf5 pytables

例如,我有以下表格说明。在SpectrumL中,我想存储一个(频谱图)我还不知道确切的大小。同样,我想存储一些标签(这将是字符串),它们的大小会因记录而异。但是,当我尝试为此执行构建语句时,我收到以下错误:

TypeError: Passing an incorrect value to a table column. Expected a Col (or subclass) instance and got: "StringAtom(itemsize=20, shape=(), dflt='')". Please make use of the Col(), or descendant, constructor to properly initialize columns. 

我正在执行的声明是:

h5file = tables.open_file("foo.h5", mode = "w", title = "Datastore")
group = h5file.create_group("/", 'metadata', 'General MetaData')
table =  h5file.create_table(group, 'footer', hdf5Pull.BuildTable, "information")

表语句类是:

   class BuildTable(IsDescription):
        artist_id = StringCol(100)
        tags = StringAtom(itemsize = 20)
        spectrumL = Float64Atom((5000, 1))
        spectrumR = Float64Atom((5000, 1))
        frequency = Float64Atom((5000, 1))

任何人都可以帮忙看看这个吗?我在理解文档方面遇到了一些麻烦。谢谢!

1 个答案:

答案 0 :(得分:0)

错误消息包含所有信息。您必须使用Col或子类,但提供Atoms

表语句必须是这样的:

class BuildTable(IsDescription):
        artist_id = StringCol(100)
        tags = StringCol(itemsize = 20)
        spectrumL = Float64Col(shape=(5000, 1))
        spectrumR = Float64Col(shape=(5000, 1))
        frequency = Float64Col(shape=(5000, 1))

如果要在单个单元格中存储多个值,则必须依赖多维单元格(请参阅here)。