2

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

4

1 回答 1

3

这不起作用的原因是因为您使用typ='safe'which 为您提供 theSafeLoader()和 that 不支持序列和映射之间的缩进差异。它由(默认)往返加载程序(它是“正​​常”的子类SafeLoader())提供

所以只需改变:

yaml = YAML(typ='safe')

yaml = YAML()

或者

yaml = YAML(typ='rt')

如果您想往返此并在程序中使用正常dict的 s 和lists ,而不是保留注释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)
于 2018-03-13T06:11:44.930 回答