如何在块中的新行之后开始列出键
How to start listing keys after a new line in a block
使用 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
如您所见,块序列项指示器 (-
) 不是
在序列项的缩进内偏移,并这样做 and/or 以获得
额外的行换行,你将不得不改变 PyYAML 发射器的内部结构。
另一个built-in 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
built-in,无论如何
你的意思是。 Python 有一个标准库(因为它带有
包括电池),例如包含一个 JSON 解析器。但是还有
标准库中没有 YAML 解析器。
使用 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
如您所见,块序列项指示器 (-
) 不是
在序列项的缩进内偏移,并这样做 and/or 以获得
额外的行换行,你将不得不改变 PyYAML 发射器的内部结构。
另一个built-in 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
built-in,无论如何
你的意思是。 Python 有一个标准库(因为它带有
包括电池),例如包含一个 JSON 解析器。但是还有
标准库中没有 YAML 解析器。