gpt4 book ai didi

python - 在 Python 中加载与 Jinja2 嵌套的 YAML

转载 作者:太空狗 更新时间:2023-10-30 00:20:01 27 4
gpt4 key购买 nike

我有一个 YAML 文件 (all.yaml),如下所示:

...
var1: val1
var2: val2
var3: {{var1}}-{{var2}}.txt
...

如果我像这样在 Python 中加载它:

import yaml

f = open('all.yaml')
dataMap = yaml.safe_load(f)
f.close()
print(dataMap["var3"])

输出是 {{var1}}-{{var2}}.txt 而不是 val1-val2.txt

是否可以用值替换嵌套的变量?

我尝试加载它:

import jinja2
templateLoader = jinja2.FileSystemLoader( searchpath="/path/to/dir" )
templateEnv = jinja2.Environment( loader=templateLoader )
TEMPLATE_FILE = "all.yaml"
template = templateEnv.get_template( TEMPLATE_FILE )

不再抛出异常,现在我卡住了,必须研究如何进行。

最佳答案

首先定义一个Undefined类,加载yaml获取已知值。然后再次加载并使用已知值进行渲染。

#!/usr/bin/env python

import yaml
from jinja2 import Template, Undefined

str1 = '''var1: val1
var2: val2
var3: {{var1}}-{{var2}}.txt
'''

class NullUndefined(Undefined):
def __getattr__(self, key):
return ''

t = Template(str1, undefined=NullUndefined)
c = yaml.safe_load(t.render())

print t.render(c)

运行它:

$ ./test.py
var1: val1
var2: val2
var3: val1-val2.txt

关于python - 在 Python 中加载与 Jinja2 嵌套的 YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31967064/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com