2012-04-19 72 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)") 

不優雅,但現在工作。