python - 数组在 PyYAML 中没有缩进或空格
问题描述
在下面的代码中,我创建了net_plan_dict
变量字典并将其转换为 YAML 格式文件。在字典中,我有一个名为的字段addresses
,它是一个由三个元素组成的数组。创建 YAML 文件后,三个数组元素没有放在addresses
field 下:
import yaml
net_plan_dict = {
'networking': {
'addresses': ['192.168.1.1', '192.168.1.2', "192.168.1.3"],
'gateway4': '192.168.121.1'
}
}
with open("new.yaml", "w") as f:
yaml.dump(net_plan_dict, f)
上面代码的输出如下(在下面的文件中,IP不在地址下面,也没有空格或缩进)。
新的.yaml:
networking:
addresses:
- 192.168.1.1 <-------- does not have indent
- 192.168.1.2
- 192.168.1.3
gateway4: 192.168.121.1
但我的目标是获取此输出文件(如何创建此文件,当 ips 在地址字段下时):
networking:
addresses:
- 192.168.1.1
- 192.168.1.2
- 192.168.1.3
gateway4: 192.168.121.1
解决方案
PyYAMLdump()
没有对映射(2 个位置)和序列(4 个位置)进行不同缩进的精细控制,也不能-
在(序列)缩进空间内偏移序列指示符( )。
如果你想对你的输出进行那种控制,你应该使用ruamel.yaml
(免责声明:我是那个包的作者):
import sys
import ruamel.yaml
net_plan_dict = {
'networking': {
'addresses': ['192.168.1.1', '192.168.1.2', "192.168.1.3"],
'gateway4': '192.168.121.1'
}
}
yaml = ruamel.yaml.YAML()
yaml.indent(mapping=2, sequence=4, offset=2)
yaml.dump(net_plan_dict, sys.stdout)
这使:
networking:
addresses:
- 192.168.1.1
- 192.168.1.2
- 192.168.1.3
gateway4: 192.168.121.1
推荐阅读
- java - 需要帮助阅读文本文件
- apache - 使用未激活 SSL 的 htaccess 强制 http-NOT https
- python - 如何通过 Python 函数运行多个键
- php - 将双精度转换为整数时 PHP 不会产生正确的输出
- python - 如何在 Python 3.x 中使用“locals()”绑定与 exec?
- c - gcc -fstack-protector 不抛出错误
- angular - 使用 NPM 将纯 JS 库添加到 Ionic / Angular
- python - 如何使用显式值评估带有索引变量的 SymPy 表达式?
- windows - MinGW 丢失了 boost 文件
- javascript - JavaScript 和 HTML 上的大量数据导致 XAMPP 中的“页面无响应”对话框