Библиотека YAML в Python
В этом руководстве мы узнаем, как использовать библиотеку YAML в Python 3. В последние годы она стала очень популярной благодаря использованию для хранения данных в виде сериализованных файлов конфигурации. Поскольку YAML по сути является форматом данных, библиотека YAML довольно простая, поскольку единственная необходимая функциональность – это возможность анализировать файлы в формате YAML.
В этой статье мы начнем с рассмотрения того, как данные хранятся в файле YAML, а затем загрузим эти данные в объект Python. Наконец, мы узнаем, как сохранить объект Python в файле YAML.
Прежде чем мы двинемся дальше, есть несколько предварительных условий для этого урока. Вы должны иметь базовое представление о синтаксисе Python или иметь хотя бы начальный опыт программирования на каком-либо другом языке.
Установка
Процесс установки YAML довольно прост. Это можно сделать двумя способами, начнем с простого.
Метод 1: через точку
Самый простой способ установить библиотеку YAML в Python – через диспетчер пакетов pip. Если в вашей системе установлен pip, выполните следующую команду, чтобы загрузить и установить YAML:
$ pip install pyyaml
Метод 2: через источник
Если у вас не установлен pip или у вас возникли проблемы с описанным выше методом, вы можете перейти на исходную страницу библиотеки. Загрузите репозиторий в виде zip-файла, откройте терминал или командную строку и перейдите в каталог, в который загружен файл. Когда вы окажетесь там, выполните следующую команду:
$ python setup.py install
Примеры кода
В этом разделе мы узнаем, как обрабатывать (манипулировать) файлами YAML, начиная с того, как их читать, то есть как загружать их в наш скрипт Python, чтобы мы могли использовать их в соответствии с нашими потребностями.
Чтение файлов
В этом разделе мы увидим, как читать файлы YAML в Python. Начнем с создания двух файлов в формате YAML.
Содержимое первого файла выглядит следующим образом:
# fruits.yaml file apples: 20 mangoes: 2 bananas: 3 grapes: 100 pineapples: 1
Содержимое второго файла выглядит следующим образом:
# categories.yaml file sports: - soccer - football - basketball - cricket - hockey - table tennis countries: - Pakistan - USA - India - China - Germany - France - Spain
Вы можете видеть, что файлы fruit.yaml и category.yaml содержат разные типы данных. Первый содержит информацию только об одном объекте, то есть о фруктах, а второй содержит информацию о видах спорта и странах.
Давайте теперь попробуем прочитать данные из двух файлов, которые мы создали с помощью скрипта Python. Метод load() из модуля yaml можно использовать для чтения файлов YAML. Взгляните на следующий скрипт:
# process_yaml.py file
import yaml
with open(r'E:\data\fruits.yaml') as file:
# The FullLoader parameter handles the conversion from YAML
# scalar values to Python the dictionary format
fruits_list = yaml.load(file, Loader=yaml.FullLoader)
print(fruits_list)
Вывод:
{ 'apples': 20, 'mangoes': 2, 'bananas': 3, 'grapes': 100, 'pineapples': 1 }
В приведенном выше скрипте мы указали yaml.FullLoader в качестве значения для параметра Loader, который загружает полный язык YAML, избегая выполнения произвольного кода. Вместо использования функции загрузки и последующей передачи yaml.FullLoader в качестве значения параметра Loader вы также можете использовать функцию full_load(), как мы увидим в следующем примере.
Давайте теперь попробуем прочитать второй файл YAML аналогичным образом, используя скрипт Python:
# read_categories.py file
import yaml
with open(r'E:\data\categories.yaml') as file:
documents = yaml.full_load(file)
for item, doc in documents.items():
print(item, ":", doc)
Поскольку в файле category.yaml 2 документа, мы выполнили цикл, чтобы прочитать их оба.
Вывод:
sports : ['soccer', 'football', 'basketball', 'cricket', 'hockey', 'table tennis'] countries : ['Pakistan', 'USA', 'India', 'China', 'Germany', 'France', 'Spain']
Как видно из последних двух примеров, библиотека автоматически обрабатывает преобразование данных в формате YAML в словари и списки Python.
Запись
Теперь, когда мы узнали, как преобразовать файл YAML в словарь Python, давайте попробуем сделать что-то наоборот, то есть сериализовать словарь Python и сохранить его в файл в формате YAML. Для этого воспользуемся тем же словарем, который мы получили в результате нашей последней программы.
import yaml
dict_file = [{'sports' : ['soccer', 'football', 'basketball', 'cricket', 'hockey', 'table tennis']},
{'countries' : ['Pakistan', 'USA', 'India', 'China', 'Germany', 'France', 'Spain']}]
with open(r'E:\data\store_file.yaml', 'w') as file:
documents = yaml.dump(dict_file, file)
Метод dump() принимает словарь Python как первый, а объект File как второй параметр.
После выполнения приведенного выше кода в вашем текущем рабочем каталоге будет создан файл с именем store_file.yaml.
# store_file.yaml file contents: - sports: - soccer - football - basketball - cricket - hockey - table tennis - countries: - Pakistan - USA - India - China - Germany - France - Spain
Еще одна полезная функция, которую предлагает библиотека YAML для метода dump(), – это параметр sort_keys. Чтобы показать, что он делает, применим его к нашему первому файлу, то есть fruit.yaml:
import yaml
with open(r'E:\data\fruits.yaml') as file:
doc = yaml.load(file, Loader=yaml.FullLoader)
sort_file = yaml.dump(doc, sort_keys=True)
print(sort_file)
Вывод:
apples: 20 bananas: 3 grapes: 100 mangoes: 2 pineapples: 1
В выводе видно, что фрукты отсортированы в алфавитном порядке.
Заключение
В этом кратком руководстве мы узнали, как установить библиотеку Python YAML (pyyaml) для управления файлами в формате YAML. Мы рассмотрели загрузку содержимого файла YAML в нашу программу Python в виде словарей, а также сериализацию словарей и сохранение их ключей. Библиотека довольно краткая и предлагает только основные функции.
Автор