ruamel.yaml - 缩进序列不起作用?

时间:2018-03-13 05:56:09

标签: python yaml ruamel.yaml

MWE:

import sys
from ruamel.yaml import YAML
yaml = YAML(typ='safe')
yaml.default_flow_style = False
yaml.indent(sequence=4, mapping=2, offset=2)
d = {
    'name': 'asdf',
    'types': [
        1,
        2,
    ],
    'class': 1,
}
import sys
yaml.dump(d, sys.stdout)
>>>
class: 1
name: asdf
types:
- 1
- 2

我希望类型在-条目之前有缩进 - 为什么不是这样?文档相当稀缺,yaml.indent方法似乎没有效果,无论我尝试的值组合......

py 3.6.4 / winx64,ruamel 0.15.35

1 个答案:

答案 0 :(得分:1)

这不起作用的原因是因为您使用typ='safe'SafeLoader()提供了SafeLoader()并且不支持序列和映射之间的缩进差异。它由(默认)往返加载器提供(它是"普通" yaml = YAML(typ='safe') )的子类

所以只需改变:

yaml = YAML()

yaml = YAML(typ='rt')

dict

如果您想要往返 - 并且在您的计划中拥有正常的listCommentedMap(),而不是保留CommentedList()import sys import ruamel.yaml yaml_str = """\ class: 1 name: asdf types: - 1 - 2 """ yamll = ruamel.yaml.YAML(typ='safe') yamld = ruamel.yaml.YAML() yamld.indent(mapping=4, sequence=4, offset=2) data = yamll.load(yaml_str) assert type(data) == dict yamld.dump(data, sys.stdout) 子类的评论,你可以这样做:

forEach