在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解析器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句