Один файл YAML может содержать более одного документа. Один документ заканчивается необязательными 3-мя точками '...'
и следующий документ начинается с обязательным тройным тире '---'
. Можно прочитать все документы, расположенные в файле, используя функцию yaml.load_all()
.
Функция yaml.load_all()
анализирует данные и возвращает последовательность объектов Python, соответствующих документам YAML.
import yaml documents = """ --- name: Alicia room: 10 description: Administrator. --- name: Julia room: 11 # обратите внимание как можно переносить # длинные строки в документе YAML description: > Software engineer. --- name: Bob room: 13 description: Employee """ data = yaml.load_all(documents, Loader=yaml.SafeLoader) print(data) # <generator object load_all at 0x7fa449c33900> print(list(data)) # [{'name': 'Alicia', 'room': 10, 'description': 'Administrator.'}, # {'name': 'Julia', 'room': 11, 'description': 'Software engineer.\n'}, # {'name': 'Bob', 'room': 13, 'description': 'Employee'}]
Из примера видно, что функция yaml.load_all()
возвращает генератор из прочитанных/загруженных документов. Можно распечатать эти документы в виде списка.
Печать загруженных документов YAML происходит при итерации по возвращаемому генератору docs
в цикле for/in
:
import yaml from yaml.loader import SafeLoader # читаем `test.yaml` с 3 документами with open('test.yaml', 'r') as f: docs = yaml.load_all(f, Loader=SafeLoader) # итерируемся по генератору `docs` for data in docs: print(data) # {'name': 'Alicia', 'room': 10, 'description': 'Administrator.'}, # {'name': 'Julia', 'room': 11, 'description': 'Software engineer.\n'}, # {'name': 'Bob', 'room': 13, 'description': 'Employee'}