有没有办法在与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