如何使用 ruamel.yaml 正确输出字符串

How to correctly output strings with ruamel.yaml

我正在尝试使用 ruamel 更新一些 dependabot 文件。

Dependabot 要求时间是一个字符串。 The property '#/updates/0/schedule/time' of type integer did not match the following type: string

以下代码可以重现错误行为:

import ruamel.yaml, sys
test = "time: 09:00"
yaml = ruamel.yaml.YAML()
yaml.dump(test, sys.stdout)

给出:

'time: 09:00'

不应该是这样的吗?

'time: "09:00"'

输出是正确的 YAML。因为你转储了一个字符串和你的 字符串包含一个冒号(YAML 的值指示器),后跟一个 space,你会得到引号 您的输出,因为否则输入将作为字典读回。

要获取 09:00 周围的引号,它们必须出现在您的输入字符串中:

import ruamel.yaml, sys
test = "time: \"09:00\""
yaml.dump(test, sys.stdout)

给出:

'time: "09:00"'

如果您不想输出单个字符串,则不要转储字符串,而是转储字典

test = dict(time="09:00")
yaml.dump(test, sys.stdout)

给出:

time: 09:00

因为在这种情况下没有必要在 09:00 周围加上引号,所以 ruamel.yaml 不需要 把它们放在那里。您可以通过以下方式强制它们在 09:00 左右(而不是在 time 左右) 创建一个双引号字符串项,并转储:

DQ = ruamel.yaml.scalarstring.DoubleQuotedScalarString
test = dict(time=DQ("09:00"))
yaml.dump(test, sys.stdout)

给出:

time: "09:00"