查询基于位的值

时间:2012-04-19 14:29:34

标签: python database python-2.7 pytables

我有一个问题如何从pytables获取值。值基于位,但存储为整数。

我的表格中的一列是Int32Column(),名称为'Value'。在本专栏中,我将存储整数值,其中每个位都有不同的含义。所以,如果我想要一些信息,我将从表中获取值并进行一些操作操作。我不知道如何查询从表中获取指定的值。

例如,我想知道Value列中的所有值,其中第一位== 1,第三位== 1.

如何进行查询? 我正在尝试使用面具:

[ x['Value'] for x in table.where('((Value & mask) == mask)')]

但是,我得到了例外:

NotImplementedError: unsupported operand types for \*and\*: int, int

处理查询必须非常快,因为将来会有大量的行。一个限制是值必须是表中的int值,因为我以int格式从服务器获取值。我希望有人有更好的解决方案。

1 个答案:

答案 0 :(得分:1)

供将来参考。

我遇到了类似的问题,并通过以下方式解决了这个问题。由于通常的按位运算符(<<>>)不可用且&,|的含义运算符是合乎逻辑的,而不是按位,必须即兴发挥。

为了检查值VAL是否设置了第n位,我们可以将感兴趣的位移到第0位,这表示数字的奇偶校验(2 ** 0)。可以使用模数运算符检查奇偶校验。 因此,可以做一些事情,例如检查是否设置了第25位而未设置16。

table.where("((VAL/(2**25))%2==1) & ((VAL/(2**16))%2==0)")

不优雅,但现在正在工作。