在Python中转储时,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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...