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

如何在ruamel.yaml中保留列表的原始格式?

问题:ruamel.yaml如何保留多行流式列表的原始格式?

我有一个YAML文件,其中某个值为多行形式的流式列表:

my_list: [1,2,3,4,5,6,7,8,9,10,
          11,12,13,14,15,16,17,18,19,20]

使用ruamel.yaml加载并转储该文件时,会出现两个变化:

  • 将列表合并为单行
  • 在列表项之间添加空格

转储后的内容如下:

my_list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

请问是否有方法让ruamel.yaml保留列表的原始格式?我已查阅ruamel.yaml相关文档,但相关内容较少;我知道LiteralScalarString可用于保留字符串格式,希望找到列表对应的等效方法。


解决方法

ruamel.yaml的round-trip模式可以保留大部分原始格式信息,结合参数调整就能实现需求:

1. 核心思路

  • 使用round-trip模式加载文件,保留原始结构与格式元数据
  • 关闭流式列表逗号后的自动空格
  • 设置合适的输出宽度,让列表在指定位置换行

2. 代码示例

from ruamel.yaml import YAML

# 初始化YAML对象,开启round-trip模式
yaml = YAML()
yaml.preserve_quotes = True

# 关闭流式列表逗号后的空格
yaml.flow_style_comma_space = False

# 设置输出宽度,匹配原始列表的换行位置(可根据实际调整数值)
yaml.width = 30

# 加载原始YAML文件
with open("input.yaml", "r") as f:
    data = yaml.load(f)

# 转储回文件,保留原始格式
with open("output.yaml", "w") as f:
    yaml.dump(data, f)

3. 关键参数说明

  • flow_style_comma_space = False:直接禁用流式列表中逗号后的自动空格,解决列表项间新增空格的问题。
  • yaml.width = 30:控制输出行宽,当流式列表长度超过阈值时自动换行,调整数值可精准匹配原始列表的换行位置。
  • round-trip模式:默认保留原始的流式/块式列表风格,不会将流式列表转为块式结构。

如果需要完全复刻原始的换行位置,还可以借助CommentedSeq手动添加换行标记,但上述方法已能覆盖绝大多数场景。


内容的提问来源于stack exchange,提问作者naitchman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:25:34