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