Pytables根据匹配列值列表选择行

时间:2016-09-01 15:16:42

标签: python hdf5 pytables

我想通过匹配离散值列表的列在HDF5文件中进行选择。但是,据说我的查询包含几十个值,可能包含几个不同的键列,因此我不想使用内核超长查询,例如:

((key1=="value1")|(key1=="value2")) & ((key2=="value3")|(key1=="value4"))

但是,为了速度考虑,它仍然必须以某种方式在内核中完成(我也在索引列并保持我的巨大表排序)。这是一些帮助代码,我匹配一个单独的值:

import string
import random
import tables as pt


class KeyValue(pt.IsDescription):
    key = pt.StringCol(itemsize=30, dflt=" ", pos=0)
    value = pt.UInt16Col(dflt=0, pos=1)


file = pt.open_file("test.hdf5", "w", title=title)
m = file.create_table("/", "test", KeyValue)

for j in range(20):
    values = []
    for i in range(100000):
        key = "".join(random.sample(string.ascii_uppercase, 5))
        value = random.randint(0, 1000000)
        values.append((key, value))
    m.append(values)

rows = file.root.test.read_where('key == b"AAAA"')
file.close()

1 个答案:

答案 0 :(得分:0)

假设您有一个要选择的值列表,可以使用字符串连接生成查询字符串:

"&".join(["(key={0})".format(value) for value in values])