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

ruamel.yaml导出YAML时首行出现多余短横线与缩进如何解决

问题根因

你导出的YAML多了首行短横线和全局缩进,核心原因是待导出的每个deployment对象本身就是列表类型:

  • 调用load_all加载单文档YAML返回的是迭代器,转列表后结构为[实际的YAML配置字典]
  • 你在define_exp_parameters函数中深拷贝的是整个列表,不是列表里的配置字典,因此最终待导出的每个对象都是[{配置}]格式的列表,ruamel.yaml导出列表时自然会生成短横线和对应缩进。

修复方案

核心逻辑修正

修改define_exp_parameters函数,只拷贝列表中的实际配置对象,不要拷贝整个加载得到的列表;同时初始化ruamel.yaml实例时添加preserve_quotes=True参数,保证原有单引号格式不丢失,再补全文件保存的路径、写入模式等疏漏即可。

修复后完整代码

import copy
import ruamel.yaml
from ruamel.yaml.scalarstring import (DoubleQuotedScalarString as dq, 
                                      SingleQuotedScalarString as sq)

def define_exp_parameters(deployments):
    deployment_list = []
    # 取出load_all得到的列表里的实际配置对象
    base_config = deployments[0]
    for duration in range(30, 71, 1):
        for cpu_cores in range(1, 4):
            # 深拷贝基础配置,不是整个列表
            new_config = copy.deepcopy(base_config)
            new_config['spec']['annotationCheck'] = 'true'
            # 这里可按需添加duration、cpu_cores对应的配置修改逻辑
            deployment_list.append(new_config) 
    return deployment_list   

# 初始化时添加preserve_quotes=True保留原有引号格式
testyaml = ruamel.yaml.YAML()
testyaml.preserve_quotes = True
testyaml.default_flow_style = False

template_dir = "替换为你的模板文件实际路径.yaml"
save_base_dir = "替换为你的导出目录实际路径"

with open(template_dir, 'r', encoding='utf-8') as read_file:
    deployments = testyaml.load_all(read_file)
    deployments = list(deployments)
    deployments = define_exp_parameters(deployments)
            
for idx, deployment in enumerate(deployments, start=1):
    # 拼接导出文件路径,添加写入模式
    save_path = f"{save_base_dir}/deployment_{idx}.yaml"
    with open(save_path, 'w', encoding='utf-8') as created_file:
        # 直接dump单个配置字典,不会生成多余的短横线和缩进
        testyaml.dump(deployment, created_file)

修改后导出的YAML会完全匹配原模板的格式,不会出现多余的首行短横线和缩进,同时原有显式单引号会被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 22:57:03