Python - operator

前言

最近在實作需要處理字串並且把它改成真實的判斷式,找 google 的過程中找到了一篇解答,當中剛好看到 Operator 這個套件,以下就用一些範例來示範~

實作

處理的範例: 1=1AND2<5OR8>9

可以使用re把字串處理成陣列

1
2
re.split("AND|OR", payload)
# -> [1=1, 2<5, 8>9]

接著再使用迴圈+同樣的方法去處理掉=><

在處理完之後就可以找到所有的 key 以及 value 的陣列

接著就是要把 ANDOR 找出來存下來,這邊我會會使用split('AND', 1)只切第一個找到的AND字串,因為像是 SQL Where 子句的功能要一個一個處理才行,否則最後判斷會出問題。

1
2
3
4
5
while re.search('(AND)|(OR)', payload) is not None:
result = payload.split('AND', 1)
if result[0] and ... # 判斷 AND 字串
result = payload.split('OR', 1)
if result[0] and ... # 判斷 OR 字串

接著再切完之後會拿到operator_list知道裡面有哪些運算子的陣列,以原本的資料來說可以用迴圈去處理,這邊我就用簡單的範例來表示operator可以處理的東西。

像是operator除了可以判斷純數字以及純字串以外,也可判斷英文+數字的組合。

1
2
3
4
5
6
7
operator_list = ['>', '<', '=']
if operator_list[0] == '>':
result = operator.gt(2, 0)
if operator_list[1] == '<':
result = operator.lt('z01', 'z99')
if operator_list[2] == '=':
result = operator.eq('A', 'A')

使用以上方法可以比對運算子,而使用以下方法則可以比對AND以及OR

1
2
3
4
5
ex = ['AND', 'OR']
if ex[0] == 'AND':
result = operator.and_(1, 1)
if ex[1] == 'OR':
result = operator.or_(1, 0)

結論

透過 operator 這個函示庫讓我處理運算子們可以少很多事,藉此紀錄一下工作上使遇到的一些方法以及問題,最驚訝的就是可以比對英文+中文的判斷式,以一些韌體的本版資訊來說他們會擁有這樣的組合,在上傳之後要比對時用這樣的方法就很方便,若有什麼問題歡迎留言給我 😊

參考