繁体   English   中英

使用某些键和带双引号的值从python生成YAML文件

[英]Generate YAML file from python with certain keys and values with double quotes

最近,Ubuntu已开始随netplan一起提供。 它需要yaml配置来设置网络接口。 因此,例如,它需要以下yaml才能设置WiFi:

network:
    version: 2
    renderer: NetworkManager
    wifis:
        interface_name:
            access-points:
                "apn":
                    password: "pwd"
            nameservers:
                addresses: [8.8.4.4, 8.8.8.8]
            dhcp4: true

请注意,在访问点下,network_ssid_name(apn)和密码字段的值(pwd)用双引号引起来。

我四处查看堆栈溢出,发现了这个

但是,此解决方案需要从pip调用ruamel.yaml安装模块。 我想使用我的python发行版中已经可用的PyYAML模块来实现此目的。

到目前为止,我尝试了一些方法:

import yaml

d = {'network': {'version': 2, 'renderer': 'NetworkManager', 'wifis':{'wlp58s0': {'access-points': {b'apn': {'password': b'pwd'}}}}}}


with open('/home/edyza/result.yml', 'w') as yaml_file:
    yaml.dump(d, yaml_file, default_flow_style=False, default_style=None)

这个的输出是

network:
  renderer: NetworkManager
  version: 2
  wifis:
    wlp58s0:
      access-points:
        apn:
          password: pwd

现在我尝试使用转义符和其他一些东西,例如

import yaml

d = {'network': {'version': 2, 'renderer': 'NetworkManager', 'wifis':{'wlp58s0': {'"access-points"': {'apn': {'password': "\"pwd\""}}}}}}

with open('/home/edyza/result.yml', 'w') as yaml_file:
    yaml.dump(d, yaml_file, default_flow_style=False, default_style=None)

然后输出更改为

network:
  renderer: NetworkManager
  version: 2
  wifis:
    wlp58s0:
      '"access-points"':
        apn:
          password: '"pwd"'

在不使用第三方模块的情况下,我可以进行哪些更改以在适当的键和值处用双引号引起期望的输出?

还是我应该考虑生成yaml文件的另一种方法。

在YAML中,除了特殊情况(字符串以特殊字符开头,如果包含控制字符或:<SPACE> ),则不需要用引号引起来。

作为参考,我可以推荐有关YAML报价的文章吗?

我认为netplan YAML解析器不太可能真的需要这些引号。 您是否尝试了不带引号的操作,但收到错误消息?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM