2011-09-22 72 views
0

我正在做一些評估已經作爲JSON對象保存到文件的日誌數據。 爲了便於我的工作,我創建了2個小型python腳本,它們根據正則表達式篩選出日誌條目,並從事件中打印出多個字段。評估字典變量上的數學表達式

現在我希望能夠在打印字段時評估簡單的數學運算。這樣我可以只是說一些像

./print.py type download/upload 

它會打印類型和上傳下載率。我的問題是我不能使用eval(),因爲值實際上在dict之內。

有沒有簡單的解決方案?

+0

你需要一個更具體的equistion你想要一個特定的答案。有很多潛在的方法來解決這個問題。 –

+0

你有沒有想要處理的數據的例子? –

回答

2
eval

任選需要globalslocals字典。因此,你可以這樣做:

namespace = dict(foo=5, bar=6) 
print eval('foo*bar', namespace) 

記住eval是「邪惡的」,因爲它不是安全的,如果執行的字符串是不可信任的。儘管你的幫手腳本應該沒問題。

爲了完整性,還有ast.literal_eval()這是更安全,但它只評估文字,這意味着沒有辦法給它一個字典。

1

您可以將dict作爲locals傳遞給eval()。這將允許它解決downloadupload作爲名稱,如果它們是dict中的鍵。

>>> d = {'a': 1, 'b': 2} 
>>> eval('a+b', globals(), d) 
3