如何使用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
相关产品推荐
相关产品推荐

