Сообщить об ошибке.

Загрузка/чтение документа YAML в Python

Функция yaml.load() модуля PyYAML в Python

Можно прочитать документ 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+ будет выведено предупреждение, но функция все равно будет работать.

Пример создания объектов Python разного типа из YAML.

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}}