PyYAML文档只简单地讨论了dump()参数,因为没有太多要说的。这种控件不是由PyYAML提供的。
为了允许在加载的YAML中保留这样的空(和注释)行,我开始开发^{}库,它是已停止的PyYAML的超集,具有YAML 1.2兼容性,添加了许多特性,并修复了错误。使用ruamel.yaml您可以:import sys
import ruamel.yaml
yaml_str = """\
- key_1: value_a
key_2: value_b
- key_1: value_c
key_2: value_d
- key_1: value_x # a few before this were ellipsed
key_2: value_y
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
yaml.dump(data, sys.stdout)
并获得与输入字符串(包括注释)完全相同的输出。
您还可以从头开始生成所需的输出:import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
list_of_dicts = yaml.seq([ { 'key_1': 'value_a', 'key_2': 'value_b'},
{ 'key_1': 'value_c', 'key_2': 'value_d'},
{ 'key_1': 'value_x', 'key_2': 'value_y'} ])
for idx in range(1, len(list_of_dicts)):
list_of_dicts.yaml_set_comment_before_after_key(idx, before='\n')
ruamel.yaml.comments.dump_comments(list_of_dicts)
yaml.dump(list_of_dicts, sys.stdout)
使用yaml.seq()的转换是创建允许通过特殊属性附加空行的对象所必需的。
该库还允许保留/轻松设置字符串上的引号和文字样式、int(十六进制、八进制、二进制)和浮点格式。以及映射和序列的单独缩进规范(尽管不是针对单个映射或序列)。