上下文
考虑一下这个最小的工作示例:我有一个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