转储时缩进YAML列表中的项目



上下文

考虑一下这个最小的工作示例:我有一个JSON文件

$ cat main.json
[
{
"name": "a",
"numbers": [1, 2]
},
{
"name": "b",
"numbers": [10, 20]
}
]

我需要将JSON文件转换为YAML。以下脚本实现了

$ cat main.py
import json, yaml
input_file = open('main.json', 'r')
data_json = json.load(input_file)
data_yaml = yaml.dump(data_json)
print(data_yaml)

如果我们执行这个脚本,我们会得到

$ python main.py
- name: a
numbers:
- 1
- 2
- name: b
numbers:
- 10
- 20

问题

我需要将YAML列表中的项目再缩进一级。也就是说,输出应该是

- name: a
numbers:
- 1
- 2
- name: b
numbers:
- 10
- 20

而不是

- name: a
numbers:
- 1
- 2
- name: b
numbers:
- 10
- 20

附加上下文

请注意,这是一个最小的工作示例。当然,我可以通过手动再插入一个缩进级别或执行sed或任何其他工具在所有这些行中插入空格来解决这个问题,但问题是我使用的是大文件,所以检查替换是否涵盖所有情况会变得更复杂,所以我宁愿使用其他方法。

您可以考虑使用rumamel.yaml而不是PyYAML:

pip install ruamel.yaml

import json
import sys
import ruamel.yaml as yaml

input_file = open('main.json', 'r')
data_json = json.load(input_file)
yaml = yaml.YAML()
yaml.indent(sequence=4, offset=2)
yaml.dump(data_json, sys.stdout)

输出:

- name: a
numbers:
- 1
- 2
- name: b
numbers:
- 10
- 20

最新更新