使用Python中内置的yaml包,是否有可能在列表指示符破折号之后转储从新行开始的列表项?
代替此结构:
root:
- name: a
id: 0
- name: b
id: 1
我需要以下结构:
root:
-
name: a
id: 0
-
name: b
id: 1
答案 0 :(得分:0)
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解析器。