我正在做一些評估已經作爲JSON對象保存到文件的日誌數據。 爲了便於我的工作,我創建了2個小型python腳本,它們根據正則表達式篩選出日誌條目,並從事件中打印出多個字段。評估字典變量上的數學表達式
現在我希望能夠在打印字段時評估簡單的數學運算。這樣我可以只是說一些像
./print.py type download/upload
它會打印類型和上傳下載率。我的問題是我不能使用eval()
,因爲值實際上在dict
之內。
有沒有簡單的解決方案?
我正在做一些評估已經作爲JSON對象保存到文件的日誌數據。 爲了便於我的工作,我創建了2個小型python腳本,它們根據正則表達式篩選出日誌條目,並從事件中打印出多個字段。評估字典變量上的數學表達式
現在我希望能夠在打印字段時評估簡單的數學運算。這樣我可以只是說一些像
./print.py type download/upload
它會打印類型和上傳下載率。我的問題是我不能使用eval()
,因爲值實際上在dict
之內。
有沒有簡單的解決方案?
eval
任選需要globals
和locals
字典。因此,你可以這樣做:
namespace = dict(foo=5, bar=6)
print eval('foo*bar', namespace)
記住eval
是「邪惡的」,因爲它不是安全的,如果執行的字符串是不可信任的。儘管你的幫手腳本應該沒問題。
爲了完整性,還有ast.literal_eval()
這是更安全,但它只評估文字,這意味着沒有辦法給它一個字典。
您可以將dict
作爲locals
傳遞給eval()
。這將允許它解決download
和upload
作爲名稱,如果它們是dict
中的鍵。
>>> d = {'a': 1, 'b': 2}
>>> eval('a+b', globals(), d)
3
你需要一個更具體的equistion你想要一個特定的答案。有很多潛在的方法來解決這個問題。 –
你有沒有想要處理的數據的例子? –