Обновление и удаление файла YAML с помощью python?

У меня есть файл YAML, и он выглядит так:

test:
 - exam.com
 - exam1.com
 - exam2.com
test2:
 - examp.com
 - examp1.com
 - examp2.com

Мне нравится управлять этим файлом с помощью python. Задача в том, что мне нравится добавлять запись в «test2» и удалять запись из «test».


person Manzoor    schedule 26.08.2016    source источник
comment
загрузите данные в словарь python, используя библиотеку yaml. добавьте/удалите, как если бы вы делали это из обычного python dict/list. напишите исходный файл   -  person Haleemur Ali    schedule 26.08.2016
comment
Возможный дубликат stackoverflow.com/ вопросы/28557626/   -  person Dinesh Pundkar    schedule 26.08.2016


Ответы (1)


Сначала вам нужно загрузить данные, которые дадут вам словарь верхнего уровня (в переменной с именем data в следующем примере), значения для ключей будут списками. В этих списках вы можете сделать del соответственно. insert() (или append())

import sys
import ruamel.yaml

yaml_str = """\
test:
 - exam.com
 - exam1.com
 - exam2.com
test2:
 - examp.com
 - examp1.com  # want to insert after this
 - examp2.com
"""

data = ruamel.yaml.round_trip_load(yaml_str)
del data['test'][1]
data['test2'].insert(2, 'examp1.5')
ruamel.yaml.round_trip_dump(data, sys.stdout, block_seq_indent=1)

дает:

test:
 - exam.com
 - exam2.com
test2:
 - examp.com
 - examp1.com  # want to insert after this
 - examp1.5
 - examp2.com

block_seq_indent=1 необходим, так как по умолчанию ruamel.yaml будет выравнивать значение последовательности по левому краю с ключом.¹

Если вы хотите избавиться от комментария в выводе, вы можете сделать:

data['test2']._yaml_comment = None

¹ Это было сделано с помощью ruamel.yaml синтаксического анализатора YAML 1.2, который я я автор.

person Anthon    schedule 26.08.2016