使用 ruamel.yaml 打印出带有单个元素单引号的列表?



我有一个字典,里面有几个列表(包含#个字符串(。

示例列表:

hosts = ['199.168.1.100:1000', '199.168.1.101:1000']

当我尝试使用 ruamel.yaml 将其打印出来时,元素显示为

hosts:
- 199.168.1.100:1000
- 199.168.1.101:1000

我希望结果是

hosts:
- '199.168.1.100:1000'
- '199.168.1.101:1000'

所以我遍历了列表并创建了一个新列表,每个元素都是一个 ruamel SingleQuotedString

S = ruamel.yaml.scalarstring.SingleQuotedScalarString
new_list = []
for e in hosts:
new_list.append(S(e))
hosts = new_list

当我打印出来时,我最终仍然打印了没有任何引号的"主机"列表。我在这里做错了什么?

在下文中,我假设您的意思是在指示打印时转储到 YAML。

您的方法原则上是正确的,因为使用"全局">

yaml.default_style = "'"

也会得到引用hosts密钥,这不是你 要。也许您没有将hosts重新分配给实际的数据结构 您正在转储,因为hosts只是您键值对的值 是倾倒的。

以下:

import sys
import ruamel.yaml
S = ruamel.yaml.scalarstring.SingleQuotedScalarString
yaml = ruamel.yaml.YAML()
data = dict(hosts = [S(x) for x in ['199.168.1.100:1000', '199.168.1.101:1000']])
yaml.dump(data, sys.stdout)

会毫无问题地给予你想要的:

hosts:
- '199.168.1.100:1000'
- '199.168.1.101:1000'