如何使用 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"
我正在尝试使用 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"