Можно прочитать документ YAML с помощью функции yaml.load()
модуля PyYAML. Эта функция анализирует и преобразует объект YAML в словарь dict
Python. Этот процесс известен как десериализация YAML в Python.
Функция yaml.load()
модуля PyYAML принимает в качестве аргумента строку байтов, строку Unicode или объект открытого файла YAML.
Файл или байтовая строка должны быть закодированы в форматах utf-8
, utf-16-be
или utf-16-le
. По умолчанию, в модуле pyyaml
установлена кодировка utf-8
.
Пример чтения разметки YAML из строки:
import yaml from yaml.loader import SafeLoader # документ YAML yml = """ --- UserName: Alicia Password: pinga123* phone: (495) 555-32-56 room: 10 TablesList: - EmployeeTable - SoftwaresList - HardwareList ... """ # читаем документ YAML data = yaml.load(yml, Loader=SafeLoader) # смотрим, что получилось print(data) # {'UserName': 'Alicia', 'Password': 'pinga123*', # 'phone': '(495) 555-32-56', 'room': 10, # 'TablesList': ['EmployeeTable', 'SoftwaresList', 'HardwareList']}
Если вышеуказанный документ YAML сохранить в файл, то его можно прочитать следующим образом:
import yaml from yaml.loader import SafeLoader # Открываем файл with open('test.yaml') as f: # читаем документ YAML data = yaml.load(f, Loader=SafeLoader) print(data) # {'UserName': 'Alicia', 'Password': 'pinga123*', # 'phone': '(495) 555-32-56', 'room': 10, # 'TablesList': ['EmployeeTable', 'SoftwaresList', 'HardwareList']}
Для функции yaml.load()
доступны четыре загрузчика:
BaseLoader
: загружает все базовые скаляры YAML как строки.SafeLoader
: безопасно загружает подмножество YAML, в основном используется, если документ поступает из ненадежного источника.FullLoader
: загружает полный YAML, но избегает выполнения произвольного кода. По-прежнему представляет потенциальный риск при использовании для ненадежных входных данных.UnsafeLoader
: оригинальный загрузчик для ненадежных входных данных, обычно используется для обратной совместимости.Примечание: если источник файла .yaml
ненадежен, то всегда используйте функцию yaml.load()
с аргументом загрузчика Loader=SafeLoader
.
Примечание: использование yaml.load()
без указания параметра Loader=...
устарела. В PyYAML версии 5.1+ будет выведено предупреждение, но функция все равно будет работать.
import yaml yml_doc = """ none: [~, null] bool: [true, false, on, off] int: 42 float: 3.14159 list: [LITE, RES_ACID, SUS_DEXT] dict: {hp: 13, sp: 5} """ yaml.load(yml_doc, Loader=SafeLoader) # {'none': [None, None], # 'bool': [True, False, True, False], # 'int': 42, # 'float': 3.14159, # 'list': ['LITE', 'RES_ACID', 'SUS_DEXT'], # 'dict': {'hp': 13, 'sp': 5}}