如何在不丢失注释和格式的情况下更新 YAML 文件/Python 中的 YAML 自动重构

How to update YAML file without loss of comments and formatting / YAML automatic refactoring in Python

我想更新 Python 中的 YAML 文件值而不丢失 Python 中的格式和注释。例如我想转换

YAML 文件

value: 456                  # nice value

value: 6                  # nice value

界面类似于

y = yaml.load('path')
y['value'] = 6
y.save()

在Python中是否有一些优雅的方法(无需编写新的 YAML 解析库)?

我需要系统的长期可维护解决方案 - 所以没有 regex 替换对我来说是好的,因为当你在代码中对它们中的大部分进行替换时,它们变得丑陋且难以维护。

我还没有找到任何 Python 库来完成这项工作。我找到的唯一一个正在考虑该功能但尚未实现的库是 C 库 libyaml(issue on Github)。我错过了什么吗?

问题也可以表述为:你知道 Python 中的一些自动重构 YAML 库吗?

谢谢。

ruamel.yaml 可能是你要找的,它是一个 YAML parser/emitter 支持往返保存注释:

import sys
from ruamel.yaml import YAML

yaml_data = "value: 456                  # nice value"

yaml = YAML()
data = yaml.load(yaml_data)
data["value"] = 6

yaml.dump(data, sys.stdout)

输出:

value: 6                    # nice value