Моя цель - вставить пару значений ключа в файл YAML, который может быть пустым.Как вставить пару ключевых значений в пустой файл yaml в ruamel.yaml в Python?
Например, мой hiera.yaml
(используется в кукольном) файле содержит только три дефиса.
Вот мой код:
#!/usr/bin/python
import ruamel.yaml
import sys
def read_file(f):
with open(f, 'r') as yaml:
return ruamel.yaml.round_trip_load(yaml)
dict = {}
dict['first_name'] = sys.argv[1]
dict['last_name'] = sys.argv[2]
dict['role'] = sys.argv[3]
data = read_file('hiera.yaml')
pos = len(data)
data.insert(pos, sys.argv[1], dict, None)
ruamel.yaml.round_trip_dump(data, open('hiera.yaml', 'w'), block_seq_indent=1)
Я бегу это нравится:
./alice.py Алиса Doe Разработчик
Я получаю выход, как:
Traceback (most recent call last):
File "./alice.py", line 16, in <module>
pos = len(data)
TypeError: object of type 'NoneType' has no len()
Но когда мой файл hiera.yaml не пуст, например:
$ cat hiera.yaml
john:
$./alice.py Alice Doe Developer
$ cat hiera.yaml
john:
alice:
first_name: Alice
last_name: Doe
role: Developer
Тогда он работает правильно.
Скажите, пожалуйста, как вставить пару значений ключа (в моем случае a dict) в пустой файл YAML. Примеры официальной страницы ruamel.yaml используют строку doc в качестве образца содержимого YAML, а затем вставляют пары ключ-значение.
Спасибо Oz123 & Anthon. – abhishek
, но ответ Антона более подходит для меня. – abhishek
Oz123 Я немного обеспокоен тем, что вы используете открытие для добавления. IMO никогда не должен делать это с помощью файла YAML, и вы можете сделать файл незагруженным (т. Е. Неправильным YAML), если вы это сделаете. – Anthon