Я думаю, что что-то не так с вашим вводом YAML (кроме использования расширения .yml
, с 2006 года рекомендуемое расширение для файлов YAML было .yaml
). Я подозреваю, что ваши входные данные имеют некоторые дополнительные возвраты кариеса или что-то еще, поэтому убедитесь, что вы проверили это, выполнив print(repr(conf_key))
и возможно
conf_key = conf_key.replace('\r', '\n')
или подобное, чтобы очистить вещи. Как показано ниже, я не могу воспроизвести получение дополнительных новых строк
Что касается добавления в последовательность YAML, если вы хотите, чтобы вы добавляли соответствующий список в Python. И не назначайте новое значение, не относящееся к списку, ключу родительского dict:
import sys
import pathlib
import ruamel.yaml
conf_file = pathlib.Path('config.yaml')
conf_file.write_text("""\
# CONFIGURATION FILE
# COMMENT 1 blah
# COMMENT 2 blah blah
# COMMENT 3 blah blah blah
NAME: Fruits
# CONFIGURATION FILE
# COMMENT 4 blah
# COMMENT 5 blah blah
# COMMENT 6 blah blah blah
fruit_list:
- "apple-01:9100"
""")
yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4, offset=2)
conf_key = yaml.load(conf_file)
conf_key['Fruits'] = 'some_data'
conf_key['fruit_list'].append('orange-01:9100')
conf_key['fruit_list'].extend(['pear-01:9100', 'grape-01:9100'])
yaml.dump(conf_key, sys.stdout)
, что дает:
# CONFIGURATION FILE
# COMMENT 1 blah
# COMMENT 2 blah blah
# COMMENT 3 blah blah blah
NAME: Fruits
# CONFIGURATION FILE
# COMMENT 4 blah
# COMMENT 5 blah blah
# COMMENT 6 blah blah blah
fruit_list:
- apple-01:9100
- orange-01:9100
- pear-01:9100
- grape-01:9100
Fruits: some_data
С вашим кодом вы также должны ожидать дополнительный ключ Fruits
в сопоставлении уровней root.
В общем случае во время тестирования лучше записывать в другой файл или стандартный вывод: не нужно восстанавливать исходный ввод.