gpt4 book ai didi

python - PyYAML 中的数组没有缩进或空格

转载 作者:行者123 更新时间:2023-12-01 06:24:31 57 4
gpt4 key购买 nike

在下面的代码中,我创建了 net_plan_dict 变量字典并将其转换为 YAML 格式文件。在字典中,我有一个名为 addresses 的字段,它是一个包含三个元素的数组。创建 YAML 文件后,三个数组元素未放置在 addresses 字段下:

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不在地址下方,并且没有空格或缩进)。

new.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

最佳答案

PyYAML 的 dump() 没有精细的控制来具有不同的缩进映射(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

关于python - PyYAML 中的数组没有缩进或空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60226848/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com