ruamel.yaml - 使用 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'
推荐阅读
- javascript - 在 React.js 中使用异步回调函数时无法读取状态
- c# - Xamarin.Forms Android APK 在缩小后出现并发症
- python-3.x - 如何将test1.py中声明的var放入test2.py中,对test2.py中的var进行一些操作,得到test1.py中var的更新值?
- sqlalchemy - 我如何 order_by 查询,以便所有列等于 true 的行首先运行?
- java - (更新)我想在圆圈内绘制圆圈,这些圆圈的直径越来越小,直径为 10 个像素,这些圆圈放置在一个环周围
- java - Apache Isis 和 MySQL
- python - NameError:名称'y_train'未定义
- c# - Windows 10 BLE C#:对于非绑定设备,使用 cccd 订阅来自外围设备的通知首次失败
- c# - 使用可编写脚本的对象:不断收到“找不到合适的方法来覆盖”?
- r - 计算特定元素的向量差异