python – yaml和jinja2阅读器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – yaml和jinja2阅读器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2351字,纯文字阅读大概需要4分钟。
内容图文
![python – yaml和jinja2阅读器](/upload/InfoBanner/zyjiaocheng/696/ce92a0405e1e43b98c407bc71366b384.jpg)
我希望能够在python中读取一个YAML jinja配置文件,就像使用PyYAML库一样,但是我收到了错误:
{% set name = "abawaca" %}
{% set version = "1.00" %}
package:
name: {{ name }}
version: {{ version }}
source:
fn: {{ name }}-{{ version }}.tar.gz
url: https://github.com/CK7/abawaca/archive/v{{ version }}.tar.gz
sha256: 57465bb291c3a9af93605ffb11d704324079036205e5ac279601c9e98c467529
build:
number: 0
requirements:
build:
- gcc # [not osx]
- llvm # [osx]
解决方法:
您的输入无效YAML,因为您可以轻松检查,例如here
您应首先展开{%}}构造,然后处理YAML,或者您应该将文件转换为有效的YAML.
这是选择jinja2的部分结果,其中宏序列{%…%}以在YAML中具有特殊含义的字符({)开头.
如果您需要更改YAML并再次将其写出,您可以定义自己的分隔符并选择它们,以便在YAML中没有特殊含义.
您应该放入YAML注释块的{%%},因为您在顶层有映射,并且应该只有键值对.实现这一目标的一种方法是将开头重新定义为#%%#(您不一定要改变结束,但我更喜欢对称性).
然后在更新之后,通过处理文件的小脚本运行正确的YAML,并将分隔符替换为jinja2理解的分隔符,或者调整环境,以更改jinja2使用的实际定义.
更正的data.yaml:
#% set name = "abawaca" %#
#% set version = "1.00" %#
package:
name: <{ name }>
version: 42
source:
fn: <{ name }>-<{ version }>.tar.gz
url: https://github.com/CK7/abawaca/archive/v<{ version }>.tar.gz
sha256: 57465bb291c3a9af93605ffb11d704324079036205e5ac279601c9e98c467529
build:
number: 0
requirements:
build:
- gcc # [not osx]
- llvm # [osx]
这可以通过以下方式处理:
import jinja2
from ruamel import yaml
yaml_file = 'data.yaml'
tmp_file = 'tmp.yaml'
data = yaml.round_trip_load(open(yaml_file))
data['package']['version'] = '<{ version }>'
with open(tmp_file, 'w') as fp:
yaml.round_trip_dump(data, fp)
environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(searchpath='.'),
trim_blocks=True,
block_start_string='#%', block_end_string='%#',
variable_start_string='<{', variable_end_string='}>')
print(environment.get_template(tmp_file).render())
给:
package:
name: abawaca
version: 1.00
source:
fn: abawaca-1.00.tar.gz
url: https://github.com/CK7/abawaca/archive/v1.00.tar.gz
sha256: 57465bb291c3a9af93605ffb11d704324079036205e5ac279601c9e98c467529
build:
number: 0
requirements:
build:
- gcc # [not osx]
- llvm # [osx]
请注意,您必须使用`ruamel.yaml(免责声明:我是该软件包的作者),您不能轻易地使用PyYAML执行此操作,因为它会删除有关读取YAML文件的注释.由于注释中的所有jinja2都出现在文件的开头,因此您可以使用此特定示例解决此问题,但通常情况并非如此.
内容总结
以上是互联网集市为您收集整理的python – yaml和jinja2阅读器全部内容,希望文章能够帮你解决python – yaml和jinja2阅读器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。