Массив не имеет отступа или пробела в PyYAML - PullRequest
1 голос
/ 14 февраля 2020

В приведенном ниже коде я создал словарь переменных 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-адреса не ниже адреса и не имеют пробела или отступа) :

networking:
  addresses:
    - 192.168.1.1
    - 192.168.1.2
    - 192.168.1.3
  gateway4: 192.168.121.1

1 Ответ

1 голос
/ 15 февраля 2020

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