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.