Рубрики
Без рубрики

Чтение и запись YAML в файл на Python

Автор оригинала: Muhammad Junaid Khalid.

Чтение и запись YAML в файл на Python

Вступление

В этом уроке мы узнаем, как использовать библиотеку YAML в Python 3. YAML расшифровывается как Еще один язык разметки .

В последние годы он стал очень популярным для его использования при хранении данных в сериализованном виде для конфигурационных файлов. Поскольку 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

В этом разделе мы узнаем, как обрабатывать (манипулировать) файлами YAML, начиная с того, как их читать, то есть как загружать их в наш скрипт Python, чтобы мы могли использовать их в соответствии с нашими потребностями. Итак, начнем.

Чтение файлов 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

Вы можете видеть, что фрукты.yaml и категории.файлы 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.Full Loader как значение параметра Loader , который загружает полный язык YAML, избегая выполнения произвольного кода. Вместо того, чтобы использовать функцию load , а затем передавать yaml.В качестве значения параметра 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)

Так как в категории есть 2 документа.yaml file, мы запустили цикл, чтобы прочитать их оба.

Выход:

sports : ['soccer', 'football', 'basketball', 'cricket', 'hockey', 'table tennis']
countries : ['Pakistan', 'USA', 'India', 'China', 'Germany', 'France', 'Spain']

Как вы можете видеть из последних двух примеров, библиотека автоматически обрабатывает преобразование данных в формате YAML в словари и списки Python.

Написание файлов 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 . Чтобы показать, что он делает, давайте применим его к нашему первому файлу, то есть fruits.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

Вы можете видеть в выходных данных, что фрукты были отсортированы в алфавитном порядке.

Вывод

В этом кратком руководстве мы узнали, как установить библиотеку YAML Python (pyyaml) для работы с файлами в формате YAML. Мы рассмотрели загрузку содержимого файла YAML в нашу программу Python в виде словарей, а также сериализацию словарей Python в файлы YAML и хранение их ключей. Библиотека довольно коротка и предлагает только основные функциональные возможности.