删除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
相关产品推荐
相关产品推荐

