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

如何使用ruamel.yaml包编辑YAML文件且不改变原文件的缩进格式

解决方案

你出现这个问题的原因是,虽然通过ruamel.yaml.util.load_yaml_guess_indent方法获取到了原YAML文件的缩进配置参数,但没有将参数同步配置到你初始化的YAML操作实例中,导出时会使用ruamel.yaml的默认缩进规则,导致列表的-符号和父级键对齐,丢失了原有的缩进。

你只需要在加载完配置后,给YAML实例设置对应的缩进参数即可,修正后的代码如下:

import ruamel.yaml
yaml = ruamel.yaml.YAML()

file_name = 'input.yaml'
config, ind, bsi = ruamel.yaml.util.load_yaml_guess_indent(open(file_name))
# 新增这行配置,将原文件的缩进规则应用到导出操作
yaml.indent(mapping=ind, sequence=ind, offset=bsi)

instances = config['instances']
instances[0]['host'] = '1.2.3.4'
instances[0]['username'] = 'Username'
instances[0]['password'] = 'Password'

with open('output.yaml', 'w') as fp:
    yaml.dump(config, fp)

上述代码中yaml.indent的三个参数作用分别为:

  • mapping:字典类型结构的缩进宽度
  • sequence:列表类型结构的缩进宽度
  • offset:列表项前-符号相对于列表层级的偏移量

配置完成后导出的YAML就会完全保留原有的缩进格式和注释内容,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:39:04