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

2024-04-18 17:00:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我希望类型在-项之前有一个缩进——为什么不是这样?文件相当稀少山药缩进方法在这里似乎没有效果,不管我尝试的值的组合。。。在

py 3.6.4/winx64,鲁美尔0.15.35


Tags: namefromimportdefaultyamlsysruamelflow
1条回答
网友
1楼 · 发布于 2024-04-18 17:00:45

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

所以只要改变一下:

yaml = YAML(typ='safe')

^{pr2}$

或者

yaml = YAML(typ='rt')

如果您想往返于此,并且在程序中有正常的dicts和list,而不是其中的注释保留CommentedMap()和{}子类,您可以:

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)

相关问题 更多 >