2016-09-01 6 views
1

Я хочу выбрать в файле HDF5 столбец, соответствующий дискретному списку значений. Однако, предположительно мой запрос содержит несколько десятков значений и, возможно, несколько ключевых столбцов, так что я не хочу использовать в ядре супер длинный запрос, такие как:Pytables выбирает строки на основе списка совпадающих значений столбца

((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() 

ответ

0

Если у вас есть список значений, которые вы хотите выбрать, вы можете создать строку запроса с помощью конкатенации:

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