python - 如何计算 YAML 中定义的代数表达式?

标签 python parsing yaml

我有以下两个单独的 YAML 文件。

  • val.yaml:变量在此处定义
  • expr.yaml:此处定义表达式

val.yaml

x: 2
y: 3
z: 5

expr.yaml

result: (x + y) * z

parse.py

import yaml

with open('val.yaml', 'r') as stream:
    val = yaml.load(stream)

with open('expr.yaml', 'r') as stream:
    expr = yaml.load(stream)

....

# this should be (2 + 3) * 5 = 25
print expr['result']

如何通过引用 val.yaml 中定义的变量来计算 expr.yaml 中定义的表达式?

最佳答案

您可以使用 sympy 最轻松地做到这一点:

from __future__ import print_function

import ruamel.yaml
from sympy.parsing.sympy_parser import parse_expr

yaml = ruamel.yaml.YAML(typ='safe')
with open('var.yaml') as stream:
    vars = yaml.load(stream)
with open('expr.yaml') as stream:
    expr = yaml.load(stream)

for k in expr:
    l = parse_expr(expr[k], vars)
    print('{}: {}'.format(k, l))

打印(使用Python 2或3):

result: 25
  • 您确实应该开始使用 print 作为函数,即使您一直使用 Python 2.7,因此需要 from __future__ 导入。 Python 2.7 及其 print 语句计划在两年内终止生命,因此请使用此类前向兼容性导入并习惯使用它们。
  • 您不应该使用 PyYAML 的 yaml.load() 因为它可能不安全,尤其是如果其他人编辑了您的输入文件。使用 yaml.safe_load() 或使用上面的(加载速度也更快)。

关于python - 如何计算 YAML 中定义的代数表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51186523/

相关文章:

php - 从远程服务器解析 JSON 数据

java - 如何使用 SnakeYAML 将值获取到数组中

python - 类从哪里获得它们的默认 '__dict__' 属性?

python - 如何查找具有特定父元素的元素?

ruby-on-rails - 如何制作像 Wolfram|Alpha 这样的小型引擎?

xml - 为默认命名空间中的元素添加了 tag0 命名空间

python - 在Python中实现模幂的蒙哥马利阶梯法

python - 为 DataFrames 创建我自己的方法(python)

parsing - 在 Haskell 中读取 YAML 对象列表

json - YAML 作为 JSON 超集和 TAB 字符