如何在块中的新行之后开始列出键



使用 Python 中的内置 yaml 包是否可以在列表指示符破折号之后以新行开头转储列表的项目?

而不是这个结构:

root:
  - name: a
    id: 0
  - name: b
    id: 1

我需要以下结构:

root:
  -
    name: a
    id: 0
  -
    name: b
    id: 1

AFAIK PyYAML 甚至不支持您指示的第一个输出:

import sys
import yaml as pyyaml
data = dict(root=[dict(name="a", id=0), dict(name="b", id=1)])
pyyaml.safe_dump(data, sys.stdout, default_flow_style=False, indent=4)

因为这给出了:

root:
-   id: 0
    name: a
-   id: 1
    name: b

如您所见,块序列项指示器 ( - ( 不是序列项缩进内的偏移量,并执行此操作和/或获取额外的换行符,你必须改变 PyYAML 发射器的内部结构。

另一个内置的 YAML 库 ruamel.yaml(免责声明:我是该包的作者(可以完全按照您的意愿行事:

import sys
import ruamel.yaml
data = dict(root=[dict(name="a", id=0), dict(name="b", id=1)])
yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4, offset=2)
yaml.compact_seq_map = False
yaml.dump(data, sys.stdout)

这给了:

root:
  -
    name: a
    id: 0
  -
    name: b
    id: 1

顺便说一句,我既不会称 PyYAML 也不称ruamel.yaml内置的,无论什么你的意思是。Python有一个标准库(因为它带有包括电池(,例如包含一个 JSON 解析器。但是有标准库中没有 YAML 解析器。

最新更新