Вступление
В этом руководстве мы узнаем, как использовать библиотеку 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
Вы можете видеть , что fruits.yaml
и categories.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, избегая
выполнения произвольного кода. Вместо использования load
последующей
передачей 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)
Так как есть 2 документа в categories.yaml
файл, мы запустили цикл ,
чтобы прочитать их обоих.
Выход:
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
Чтобы показать, что он делает,
применим его к нашему первому файлу, то есть 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 в виде словарей, а также сериализацию словарей Python в файлы YAML и сохранение их ключей. Библиотека довольно краткая и предлагает только основные функции.