在Python中渲染并加载yaml文件

ypr*_*rol 1 python jinja2 pyyaml ruamel.yaml

我正在尝试加载 jinja2 格式的 yaml 文件并“评估”/“渲染”模板。在这里,举个例子:

{% set name = "pyexcel-ezodf" %}
{% set version = "0.3.3" %}

package:
  name: {{ name|lower }}
  version: {{ version }}
Run Code Online (Sandbox Code Playgroud)

我希望能够加载 yaml 文件并表示 yaml['package']['version']=0.3.3

我必须尝试 ruamel YAML,但它不评估版本,只给我一个包。

这里是Python代码:

yaml = YAML(typ='jinja2')
yaml.allow_duplicate_keys = True
yaml.explicit_start = True
yaml_content = yaml.load(content)
print (yaml_content['package'])

Run Code Online (Sandbox Code Playgroud)

Mos*_*ein 5

我不确定你拥有的完整示例是什么,但这是我让它发挥作用的方法。如果我正确理解你想要加载 jinja 文件然后通过ruamel.yaml包获取值

from ruamel.yaml import YAML
from jinja2 import Environment, FileSystemLoader

jinja = Environment(loader = FileSystemLoader('.'), trim_blocks=True, lstrip_blocks=True)
template = jinja.get_template('sample.yml')
yaml=YAML()
yaml.allow_duplicate_keys = True
yaml.explicit_start = True
yaml_content = yaml.load(template.render())
print (yaml_content['package'])
Run Code Online (Sandbox Code Playgroud)
#sample.yml
{% set name = "pyexcel-ezodf" %}
{% set version = "0.3.3" %}

package:
  name: {{ name|lower }}
  version: {{ version }}
Run Code Online (Sandbox Code Playgroud)

结果:

{'name': 'pyexcel-ezodf', 'version': '0.3.3'}
Run Code Online (Sandbox Code Playgroud)

typ='jinja2'除非您有一些自定义设置,否则不支持使用ruamel,因为它给出了以下内容:

NotImplementedError: typ "jinja2"not recognised (need to install plug-in?)

Run Code Online (Sandbox Code Playgroud)