Создать файл YAML из Python с определенными ключами и значениями в двойных кавычках - PullRequest
0 голосов
/ 21 июня 2019

Недавно Ubuntu начал поставлять с netplan.Для настройки сетевых интерфейсов потребовались конфиги yaml.Так, например, для настройки WiFi требуется следующий yaml:

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

Обратите внимание на точки доступа, имя_сети_идентификатора сети (apn) и значение поля пароля (pwd) заключены в двойные кавычки.

Я огляделся по поводу переполнения стека и обнаружил this

Однако для этого решения требуется установка модуля из pip-вызова ruamel.yaml.Я хочу добиться этого, используя модуль PyYAML, который уже доступен в моем дистрибутиве Python.

Вот некоторые вещи, которые я пробовал до сих пор:

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

Теперь я попытался использовать escape-символы и некоторые другие вещи.например,

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.

1 Ответ

0 голосов
/ 17 июля 2019

В YAML заключать в кавычки строки не требуется, за исключением особых случаев (если строка начинается со специального символа, если она содержит управляющие символы или :<SPACE>).

Для справки, могу ли я рекомендовать мой статья о цитировании YAML ?

Я думаю, что маловероятно, что синтаксический анализатор YAML netplan действительно требует этих кавычек.Вы пробовали это без кавычек, и вы получили ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...