有没有办法将 YAML 转储到与 ruamel.yaml 加载的相同版本中?
Is there a way to dump YAML in same version it was loaded in with ruamel.yaml?
ruamel.yaml
是否有一种好方法可以将 YAML 文件转储为与加载时相同的版本?如果我在文件中有一个 %YAML 1.1
指令,我希望能够将文件转储到 YAML 1.1 中,而不必硬编码 version='1.1'
.
所以给定一些数据,例如,
%YAML 1.1
---
is_string: 'on'
is_boolean: on
我想避免在 round_trip_dump()
、
上硬编码 version='1.1'
x = f.read()
d = round_trip_load(x)
round_trip_dump(d, f, explicit_start=True)
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
时,"unversioned" 读数并未完全重置 yaml
实例指令。
也可以将与 is_boolean
关联的值转储为 on
,但这会影响流中的所有布尔值。
ruamel.yaml
是否有一种好方法可以将 YAML 文件转储为与加载时相同的版本?如果我在文件中有一个 %YAML 1.1
指令,我希望能够将文件转储到 YAML 1.1 中,而不必硬编码 version='1.1'
.
所以给定一些数据,例如,
%YAML 1.1
---
is_string: 'on'
is_boolean: on
我想避免在 round_trip_dump()
、
version='1.1'
x = f.read()
d = round_trip_load(x)
round_trip_dump(d, f, explicit_start=True)
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
时,"unversioned" 读数并未完全重置 yaml
实例指令。
也可以将与 is_boolean
关联的值转储为 on
,但这会影响流中的所有布尔值。