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
请注意,有必要为输出创建一个干净的新对象,因为在遇到%YAML 1.1
指令时,“未版本化”读取不会完全重置实例。
也可以转储与is_boolean
as关联的值on
,但这会影响流中的所有布尔值。