我有以下两个单独的 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/