这不起作用的原因是因为您使用
typ='safe'
这给了你
SafeLoader()
这不支持序列和映射之间的缩进差异。它由(默认)往返加载器(它是“normal”的子类)提供
SafeLoader()
)
所以只要改变一下:
yaml = YAML(typ='safe')
到
yaml = YAML()
或
yaml = YAML(typ='rt')
如果你想往返于此
dict
s和
list
,而不是保留注释
CommentedMap()
和
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)