【问题标题】:Evaluating math expression on dictionary variables评估字典变量的数学表达式
【发布时间】:2011-09-22 13:19:51
【问题描述】:

我正在评估已作为 JSON 对象保存到文件的日志数据。 为了方便我的工作,我创建了 2 个小型 python 脚本,它们根据正则表达式过滤掉记录的条目并从事件中打印出多个字段。

现在我希望能够在打印字段时评估简单的数学运算。这样我就可以说类似

    ./print.py type download/upload

它会打印类型和上传下载比率。我的问题是我不能使用eval(),因为这些值实际上在dict 内。

有简单的解决办法吗?

【问题讨论】:

  • 你需要一个更具体的方程式,你想要一个具体的答案。有很多潜在的方法可以解决这个问题。
  • 你有你要处理的数据的例子吗?

标签: python math logging evaluation


【解决方案1】:

eval 可以选择使用globalslocals 字典。因此,您可以这样做:

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

请记住,eval 是“邪恶的”,因为如果执行的字符串不能被信任,它是不安全的。不过,这对您的帮助脚本应该没问题。

为了完整起见,还有 ast.literal_eval() 更安全,但它只评估文字,这意味着没有办法给它一个 dict。

【讨论】:

    【解决方案2】:

    您可以将dict 传递给eval() 作为locals。如果 downloaduploaddict 中的键,这将允许它解析为名称。

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

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多