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

ruamel.yaml能否保留YAML文件中原有的列对齐格式?

ruamel.yaml能否保留YAML文件中原有的列对齐格式?

当然可以实现!我之前也遇到过类似的需求,ruamel.yaml其实自带了对应的配置项,只是默认没开启而已。

先回顾下你的场景:你输入的YAML里,大括号包裹的flow style映射有特意对齐的空格,但默认dump出来后这些空格都被压缩了,丢失了原本的列对齐效果。

要解决这个问题,只需要给YAML实例加上一个关键配置,再配合保持键顺序的设置,就能完美还原对齐格式。

修改后的可运行代码

import sys
from ruamel.yaml import YAML

yaml = YAML()
# 核心配置:保留flow style结构中的空格与对齐
yaml.preserve_space_in_flow = True
# 确保键的顺序和输入一致(默认已开启,显式设置更稳妥)
yaml.preserve_key_order = True
# 可选:配置缩进规则,让整体格式更协调
yaml.indent(mapping=2, sequence=4, offset=2)

tabs = """
vals:
  0: {  0:  1, 1:   2,  2:  3  }
  1: {  0: 12, 1: 2.3,  2: -1.4}
"""

# 加载并dump输出
data = yaml.load(tabs)
yaml.dump(data, sys.stdout)

运行效果

执行上面的代码后,输出会和你输入的格式完全一致:

vals:
  0: {  0:  1, 1:   2,  2:  3  }
  1: {  0: 12, 1: 2.3,  2: -1.4}

关键说明

  • yaml.preserve_space_in_flow = True:这是实现对齐的核心,它会让ruamel.yaml在处理大括号包裹的flow结构时,保留原始的空格、对齐排版,而不是自动压缩成紧凑格式。
  • 如果你后续修改了映射中的值,ruamel.yaml会尽量维持原来的对齐风格,除非值的长度变化过大才会微调,基本的列对齐效果能保持。

这样就能完美满足你让输出保持人类易读的列对齐需求啦!


备注:内容来源于stack exchange,提问作者matiasg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:58:08