如果您想保留您的来源,最好的办法是跟踪某些内容是否发生变化以及
如您的示例所示,在未更改时不要覆盖源代码。
ruamel.yaml 将始终标准化输出,如果这不是您想要的,
您唯一的希望是对文件进行精确的字符串替换,可能
使用加载数据的行信息。我建议不要这样做,
如果你保留的是为了最小化差异,你应该只是字节子弹
一次,就像您在使用某些源格式化程序时所做的那样。
但是,如果您只使用 YAML 1.1 解析器,尽管该版本是
10多年前更换了,我可以看到12:00而不是"12:00"可以
是一个问题,因为这些字符串被解释为六十进制。
在 ruamel.yaml 中,您可以将输出设置为 YAML 1.1,然后12:00
将被引用,但您会得到一个文档标题,说明它符合
过时的版本。
您可以做的另一件事是使用.preserve_quotes 属性保留所有引号:
import sys
import ruamel.yaml
yaml_str = """\
info_block:
enable: null
start: "12:00"
server_type: linux
"""
def my_represent_none(self, data):
return self.represent_scalar(u'tag:yaml.org,2002:null', u'null')
yaml = ruamel.yaml.YAML()
yaml.representer.add_representer(type(None), my_represent_none)
yaml.indent(mapping=2, sequence=2, offset=0)
yaml.preserve_quotes = True
data = yaml.load(yaml_str)
yaml.dump(data, sys.stdout)
如果与空节点的替代表示器结合使用,则提供完整的保留版本:
info_block:
enable: null
start: "12:00"
server_type: linux