如何配置ruamel.yaml使嵌套序列统一缩进2个空格
解决ruamel.yaml嵌套序列统一2空格缩进的问题
问题背景
使用ruamel.yaml 0.18.6时,需要所有层级的序列统一使用2空格缩进,但遇到两个不符合预期的情况:
- 按照文档推荐设置
indent(mapping=2, sequence=4, offset=2)后,第一层序列缩进2空格,后续层级自动切换为4空格,输出如下:
AWSTemplateFormatVersion: '2010-09-09' Conditions: HA: !Equals - !FindInMap - Environments - !Ref 'Environment' - HighAvailability - 'true'
- 默认配置下,第一层序列无缩进,后续层级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
相关产品推荐
相关产品推荐

