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

时间:2018-08-30 20:08:44

标签: 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

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

1 个答案:

答案 0 :(得分:0)

在下文中,我假设您的意思是当您指示打印时转储到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'