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

删除YML文件指定节点后如何保留原缩进格式?

解决ruamel.yaml修改YAML后列表缩进丢失的问题

使用ruamel.yaml删除DBT YML文件中指定model节点后,剩余列表项的缩进与原文件不一致,出现缩进丢失的情况。

问题原因

ruamel.yaml默认的缩进配置与原YAML文件的格式不匹配,导致输出时无法保留原有的缩进风格。

解决方法

在初始化YAML对象时,显式设置缩进参数,匹配原文件的缩进规则。修改后的代码如下:

def remove_section_from_yml(yml_path, section_name):
    yaml = ruamel.yaml.YAML()
    # 设置缩进参数,匹配原YAML的格式
    yaml.indent(mapping=2, sequence=2, offset=2)
    yaml.preserve_quotes = True

    with open(yml_path, 'r') as f:
        data = yaml.load(f)

    for i, model in enumerate(data['models']):
        if 'name' in model and model['name'] == section_name:
            del data['models'][i]
            break

    with open(yml_path, 'w') as f:
        yaml.dump(data, f)

参数说明

  • mapping=2:控制键值对(如name: model2)相对于父级的缩进为2个空格
  • sequence=2:控制列表项内部内容相对于列表符号-的缩进为2个空格
  • offset=2:控制列表符号-相对于父级(如models:)的缩进为2个空格

修改后输出的YAML会保留原有的缩进格式:

models:
  - name: model2
    columns:
      - name: USER
        description: username

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:27:33