Автор оригинала: 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 и хранение их ключей. Библиотека довольно коротка и предлагает только основные функциональные возможности.