Python - operator
前言
最近在實作需要處理字串並且把它改成真實的判斷式,找 google 的過程中找到了一篇解答,當中剛好看到 Operator 這個套件,以下就用一些範例來示範~
實作
處理的範例: 1=1AND2<5OR8>9
可以使用re把字串處理成陣列
re.split("AND|OR", payload)
# -> [1=1, 2<5, 8>9]
接著再使用
迴圈+同樣的方法去處理掉=、>、<
在處理完之後就可以找到所有的 key 以及 value 的陣列
接著就是要把 AND、OR 找出來存下來,這邊我會會使用split('AND', 1)只切第一個找到的AND字串,因為像是 SQL Where 子句的功能要一個一個處理才行,否則最後判斷會出問題。
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除了可以判斷純數字以及純字串以外,也可判斷英文+數字的組合。
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
ex = ['AND', 'OR']
if ex[0] == 'AND':
result = operator.and_(1, 1)
if ex[1] == 'OR':
result = operator.or_(1, 0)
結論
透過 operator 這個函示庫讓我處理運算子們可以少很多事,藉此紀錄一下工作上使遇到的一些方法以及問題,最驚訝的就是可以比對英文+中文的判斷式,以一些韌體的本版資訊來說他們會擁有這樣的組合,在上傳之後要比對時用這樣的方法就很方便,若有什麼問題歡迎留言給我 😊