有没有办法在与ruamel.YAML加载的同一版本中转储YAML?
使用有没有办法在与ruamel.YAML加载的同一版本中转储YAML?,yaml,ruamel.yaml,Yaml,Ruamel.yaml,使用ruamel.yaml是否有一种好方法可以将yaml文件转储回加载时的同一版本?如果文件中有%YAML 1.1指令,我希望能够将文件转储回YAML 1.1,而无需硬编码version='1.1' 所以给出一些数据,比如 %YAML 1.1 --- is_string: 'on' is_boolean: on 我希望避免在往返转储()上硬编码version='1.1' YAML文件的版本是一个快速值,加载后会重置。我的计划是以某种方式提供加载的最新文档的版本,但是对于一个流中的多个文档,这需
ruamel.yaml
是否有一种好方法可以将yaml文件转储回加载时的同一版本?如果文件中有%YAML 1.1
指令,我希望能够将文件转储回YAML 1.1,而无需硬编码version='1.1'
所以给出一些数据,比如
%YAML 1.1
---
is_string: 'on'
is_boolean: on
我希望避免在往返转储()上硬编码version='1.1'
YAML文件的版本是一个快速值,加载后会重置。我的计划是以某种方式提供加载的最新文档的版本,但是对于一个流中的多个文档,这需要更多的考虑
对于单个文档流,您可以执行以下操作来捕获指令中的版本。这一切都是通过新的API完成的。对于您在本例中使用的旧API,同样是可能的,但更困难,因为没有可附加属性的YAML()
实例:
import sys
from ruamel.yaml import YAML
from ruamel.yaml.parser import Parser
yaml_str = """\
%YAML 1.1
---
is_string: 'on'
is_boolean: on
"""
class MyParser(Parser):
def dispose(self):
self.loader.last_yaml_version = self.yaml_version
Parser.dispose(self)
yaml = YAML()
yaml.Parser = MyParser
data = yaml.load(yaml_str)
yaml2 = YAML()
yaml2.version = yaml.last_yaml_version
yaml2.dump(data, sys.stdout)
其中:
%YAML 1.1
---
is_string: 'on'
is_boolean: true
请注意,有必要为输出创建一个干净的新对象,因为当遇到%yaml 1.1
指令时,“未版本化”读数不会完全重置yaml
实例
也可以将与is_boolean
关联的值转储为on
,但这会影响流中的所有布尔值
%YAML 1.1
---
is_string: 'on'
is_boolean: true