使用.shopping
将YAML文件转储到与加载的版本相同的版本中是否有好方法?如果我在文件中有ruamel.yaml
指令,我希望能够在YAML 1.1中将文件转储回来,而不必硬编码%YAML 1.1
。
因此给出了一些数据,
version='1.1'
我希望避免在%YAML 1.1
---
is_string: 'on'
is_boolean: on
上对version='1.1'
进行硬编码,
round_trip_dump()
答案 0 :(得分: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
指令时,“无版本”读取不会完全重置%YAML 1.1
实例。
也可以将与is_boolean
相关联的值转储为on
,但这会影响流中的所有布尔值。