我正在尝试使用YAML标量值作为变量执行在YAML文件中编写的python行。
我的代码:
with open("file.yaml", "r") as file:
yaml_ = yaml.load(file)
eval(yaml_['Code'])
file.yaml
:
ToPrint:
var: something
Code: print("{{var}}")
输出为:{{var}}
(我的预期输出为:something
)。
是否可以通过这种方式打印YAML字段?
答案 0 :(得分:1)
我将YAML文件更改为:
ToPrint:
var: something
Code: print("{var}".format(**d['ToPrint']))
由于您使用的是Python3,因此也请使用Path
:
import sys
import ruamel.yaml
from pathlib import Path
yaml = ruamel.yaml.YAML()
d = yaml.load(Path('file.yaml'))
eval(d['Code'])
给出:
something
请注意,变量d
必须与值中的变量相同
为Code
使用{{var}}
看起来更像(jinja2)模板。你不能
直接评估那些,您需要扩展模板,然后全部
评估。
答案 1 :(得分:0)
您可以在ToPrint
中将eval
用作局部变量:
with open("file.yaml", "r") as file:
yaml_ = yaml.load(file)
eval(yaml_['Code'], yaml_['ToPrint'])
还有yaml文件:
ToPrint:
var: something
Code: print(f"{var}")
答案 2 :(得分:0)
扩展丹尼尔的回答:
yaml 文件:
Const:
c1: 10
c2: 20
Expression: var1 * var2 + c1 / c2
代码:
import yaml
with open("formula.yaml", "r") as file:
yaml_ = yaml.load(file)
res = eval(yaml_['Expression'],
{'var1':4, 'var2':2},
yaml_['Const'])
print(res)