ruamel.yaml如何引用包含冒号的字符串



在python中使用ruamel.yaml时,我遇到了一个问题,我转储了yaml,但包含冒号的字符串不是引号。有人知道如何解决吗?

import ruamel.yaml
import sys
yaml = YAML()
yaml.default_flow_style = False
d = {"example": "2:1"}
yaml.dump(d, sys.stdout)

产生

example: 2:1

当我期待

example: '2:1'

edit:所以上面的响应看起来是有效的yaml(https://yaml.org/spec/)。在这一过程中,我的管道中似乎有什么东西处理不当。

有可能强迫ruamel.yaml引用价值观吗?

所以我的管道中有一些假设是YAML 1.1。问题不是2:1在1.1或任何YAML版本中都不是有效的YAML,而是在YAML 1.1中2:1被解释为基60,而不是字符串。

基本上这不是问题。ruamel.yaml处理一切都很正确。

如果您的管道中有假设为YAML 1.1的元素(例如,如果它们基于PyYAML(,那么您的2:1将被解释为sexagesimal。在这种情况下,您应该在YAML()实例化后添加一行:

yaml = YAML()
yaml.version = (1, 1) # you can also use: yaml.version = "1.1"

但这将为文档添加一个明确的%YAML 1.1标题行。

您可以使用显式引用此字符串,而不是添加版本行

from ruamel.yaml.scalarstring import DoubleQuotedScalarString as DQS
d = {"example": DQS("2:1")}

最新更新