You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ruamel.yaml使嵌套序列统一缩进2个空格

解决ruamel.yaml嵌套序列统一2空格缩进的问题

问题背景

使用ruamel.yaml 0.18.6时,需要所有层级的序列统一使用2空格缩进,但遇到两个不符合预期的情况:

  1. 按照文档推荐设置indent(mapping=2, sequence=4, offset=2)后,第一层序列缩进2空格,后续层级自动切换为4空格,输出如下:
AWSTemplateFormatVersion: '2010-09-09'
Conditions:
  HA: !Equals
    - !FindInMap
        - Environments
        - !Ref 'Environment'
        - HighAvailability
    - 'true'
  1. 默认配置下,第一层序列无缩进,后续层级2空格,输出如下:
AWSTemplateFormatVersion: '2010-09-09'
Conditions:
  HA: !Equals
  - !FindInMap
    - Environments
    - !Ref 'Environment'
    - HighAvailability
  - 'true'

正确配置方案

要实现所有嵌套序列统一2空格缩进,需调整indent的三个参数,示例代码如下:

from ruamel.yaml import YAML
import sys

yaml = YAML()
# 核心配置:映射缩进2,序列每层缩进2,序列元素相对父键偏移2
yaml.indent(mapping=2, sequence=2, offset=2)
# 可选:保留原文档的引号格式
yaml.preserve_quotes = True

# 加载并输出格式化后的内容
data = yaml.load("""
AWSTemplateFormatVersion: '2010-09-09'
Conditions:
  HA: !Equals
    - !FindInMap
        - Environments
        - !Ref 'Environment'
        - HighAvailability
    - 'true'
""")
yaml.dump(data, sys.stdout)

效果验证

配置后输出的YAML格式完全符合需求,所有嵌套序列层级均为2空格缩进:

AWSTemplateFormatVersion: '2010-09-09'
Conditions:
  HA: !Equals
    - !FindInMap
      - Environments
      - !Ref 'Environment'
      - HighAvailability
    - 'true'

参数说明

  • mapping=2:保持映射(如Conditions下的HA)的缩进为2空格,符合常规YAML风格
  • sequence=2:设置每个嵌套序列层级的缩进增量为2空格,确保所有层级统一缩进规则
  • offset=2:控制序列元素(-开头的行)相对于其父键(如!Equals)的缩进偏移,避免序列元素与父键左对齐

内容的提问来源于stack exchange,提问作者Mark van Holsteijn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:08:13