2012-04-19 71 views
0

我有一个问题,如何从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

供将来参考。

我有类似的问题,并以下面的方式解决它。由于通常的按位运算符(<,<,>>)不可用,且其含义如下:运营商是合乎逻辑的,而不是按位,必须即兴发挥。

要检查VAL值是否有第n位的设置,我们可以将有趣的位移到第0位,这表示数字的奇偶性(2 ** 0)。奇偶校验可以使用模数运算符进行检查。 因此,人们可以做一些事情来检查是否设置了位25,并且未设置16。

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

不优雅,但现在工作。