在 YAML 转储时保持源未格式化
keep source unformatted while YAML dump
我的 YAML 文件如下所示:
info_block:
enable: null
start: "12:00"
server_type: linux
我已经使用 ruamel.yaml.dump
加载和转储
但是,输出的格式如下:(例如将 null 替换为空,从起始值中删除双引号)
info_block:
enable:
start: 12:00
server_type: linux
我怎样才能保留我的来源
我知道有类似 this 的东西可以保留 null
但我希望我的完整源代码未格式化。
如果你想保留你的来源,你最好的办法是跟踪是否有变化和
在没有更改的情况下不要覆盖源代码,如您的示例所示。
ruamel.yaml
将始终规范化输出,如果这不是您想要的,
您唯一的希望是对文件进行精确的字符串替换,可能
使用有关加载数据的行信息。我建议不要这样做,
如果你保留是为了最小化差异,你应该咬紧牙关
一次,就像您在使用某些源格式化程序时所做的那样。
然而,如果您仅使用 YAML 1.1 解析器,尽管该版本是
10多年前更换的,我可以看到 12:00
而不是 "12:00"
可以
是个问题,因为这些类型的字符串被解释为六十进制。
在ruamel.yaml中,您可以将输出设置为YAML 1.1,然后12:00
将被引用,但你会得到一份文件 header 说明它符合
过时的版本。
您可以做的另一件事是使用 .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
我的 YAML 文件如下所示:
info_block:
enable: null
start: "12:00"
server_type: linux
我已经使用 ruamel.yaml.dump
但是,输出的格式如下:(例如将 null 替换为空,从起始值中删除双引号)
info_block:
enable:
start: 12:00
server_type: linux
我怎样才能保留我的来源
我知道有类似 this 的东西可以保留 null
但我希望我的完整源代码未格式化。
如果你想保留你的来源,你最好的办法是跟踪是否有变化和 在没有更改的情况下不要覆盖源代码,如您的示例所示。
ruamel.yaml
将始终规范化输出,如果这不是您想要的,
您唯一的希望是对文件进行精确的字符串替换,可能
使用有关加载数据的行信息。我建议不要这样做,
如果你保留是为了最小化差异,你应该咬紧牙关
一次,就像您在使用某些源格式化程序时所做的那样。
然而,如果您仅使用 YAML 1.1 解析器,尽管该版本是
10多年前更换的,我可以看到 12:00
而不是 "12:00"
可以
是个问题,因为这些类型的字符串被解释为六十进制。
在ruamel.yaml中,您可以将输出设置为YAML 1.1,然后12:00
将被引用,但你会得到一份文件 header 说明它符合
过时的版本。
您可以做的另一件事是使用 .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