Share This
Связаться со мной
Крути в низ
Categories
//Чтение YAML-файлов в Python при помощи модуля PyYAML

Чтение YAML-файлов в Python при помощи модуля PyYAML

18.07.2021Category : Python

Перевод статьи «How to Read YAML File in Python».

YAML расшифровывается как Yet Another Mark-up Language, что означает «Еще один язык разметки». Этот формат файлов сейчас очень популярен для хранения сериализованных данных, которые достаточно удобочитаемы для человека.

Такой формат в основном используется для файлов конфигурации, но может применяться и для других целей. Содержимым такого файла могут быть различные типы скалярных данных, например число, строка и т.д. Так же это могут быть составные данные, такие как список или словарь. Расширение YAML-файлов – .yaml.

В Python есть несколько модулей для чтения файлов YAML. Сегодня мы поговорим о том, как читать файлы YAML в Python, а точнее — покажем, как это делается при помощи модуля PyYAML.

Для начала

Конечно же, прежде чем решать какие-либо задачи, нужно установить модуль PyYAML. Это, пожалуй, лучший модуль Python для чтения файлов YAML. Однако он не устанавливается вместе с Python по умолчанию. Поэтому, прежде чем проверять примеры, которые мы разберем ниже, вам придется его установить.

Чтобы установить PyYAML, выполните следующую команду:

pip install pyyaml

Создание файла YAML

Для дальнейшей работы нам понадобится файл с содержимым, как в примере ниже. Создайте его и назовите client.yaml.

- name: Kamal Hossain    email: kamal@gmail.com    mobile: 01843456790     - name: Sakil Ahamed    email: sakil@gmail.com    mobile: 015662343423     - name: Mizanur Rahman    email: mizan@gmail.com    mobile: 01936784534

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

После установки пакета PyYAML модуль YAML можно импортировать в скрипт для чтения содержимого YAML путем преобразования объекта Python.

Для создания содержимого YAML (путем сериализации содержимого объекта Python) используется функция dump() модуля yaml.

Давайте напишем код для генерации и вывода в консоль потока YAML путем преобразования содержимого объекта Python. По умолчанию функция dump() сортирует содержимое словаря на основе ключей.

import yaml  # Declare a python object with data  books = [{'name': 'Think Python: An Introduction to Software Design', 'author': 'Allen B. Downey', 'price': '23'},           {'name': 'Fluent Python: Clear, Concise, and Effective Programming', 'author': 'Luciano Ramalho',           'price': '50'},           {'name': 'Think Python: An Introduction to Software Design', 'author': 'Allen B. Downey', 'price': '33'}           ]  # Convert and print the JSON data in YAML stream  print(yaml.dump(books))

После запуска кода мы получим следующий результат:

- author: Allen B. Downey   name: 'Think Python: An Introduction to Software Design'   price: '23' - author: Luciano Ramalho   name: 'Fluent Python: Clear, Concise, and Effective Programming'   price: '50' - author: Allen B. Downey   name: 'Think Python: An Introduction to Software Design'   price: '33'

Элементы всех словарей списка Python преобразованы в элементы содержимого YAML. При этом вывод отсортирован по ключам словаря. Поэтому значение ключа author было выведено первым, а значение ключа price – последним.

Пример 2. Чтение содержимого из файла YAML

В данном примере мы будем использовать файл client.yaml, созданный ранее.

Напишем следующий код для чтения отсортированного на основе ключей содержимого файла client.yaml .

Функция load() используется для чтения полного содержимого нашего файла. Эта функция вернет содержимое файла в виде списка словарей Python. Затем функция dump() преобразует список в поток YAML, который мы после выведем в консоль.

# Import YAML module  import yaml  # Load YAML data from the file  with open('client.yaml') as fh:     read_data = yaml.load(fh, Loader=yaml.FullLoader)  # Print YAML data before sorting  print(read_data)  # Sort YAML data based on keys  sorted_data = yaml.dump(read_data)  # Print YAML data after sorting  print(sorted_data)

При запуске этого кода получим следующий вывод:

[{'name': 'Kamal Hossain', 'email': 'kamal@gmail.com', 'mobile': '01843456790'}, {'name': 'Sakil Ahamed', 'email': 'sakil@gmail.com', 'mobile': 1858717459}, {'name': 'Mizanur Rahman', 'email': 'mizan@gmail.com', 'mobile': '01936784534'}] - email: kamal@gmail.com   mobile: 01843456790   name: Kamal Hossain - email: sakil@gmail.com   mobile: 1858717459   name: Sakil Ahamed - email: mizan@gmail.com   mobile: 01936784534   name: Mizanur Rahman

После преобразования содержимого файла client.yaml в список словарей Python каждый словарь был преобразован в элемент YAML-контента, как и в предыдущем примере. Значение параметра sort_key функции dump() по умолчанию — True. Поэтому в выводе мы видим контент YAML, отсортированный по ключам.

Пример 3. Чтение ключей и значений из файла YAML

Давайте напишем код для чтения и вывода ключей и значений из файла client.yaml по отдельности. После загрузки содержимого файла в переменную read_data используем функцию item() для чтения каждого ключа и соответствующего значения. Для перебора всего содержимого файла и вывода в консоль пар «ключ-значение» воспользуемся вложенным циклом for .

# Import YAML module  import yaml  # Load the YAML file  with open('client.yaml') as fh:     # Load YAML data from the file      read_data = yaml.load(fh, Loader=yaml.FullLoader)      # Iterate the loop to read and print YAML data      for i in range(0, len(read_data)):          for key, value in read_data[i].items():             print(key, ":", value)          print('')

Вывод:

name : Kamal Hossain email : kamal@gmail.com mobile : 01843456790  name : Sakil Ahamed email : sakil@gmail.com mobile : 1858717459  name : Mizanur Rahman email : mizan@gmail.com mobile : 01936784534

Обратите внимание, что содержимое файла не отсортировано, поскольку мы не использовали функцию dump().

Пример 4. Чтение содержимого YAML-файла в список словарей

Функция safe_load() используется для преобразования содержимого файла YAML в список словарей Python. Эту функцию также можно использовать для загрузки данных из ненадежных источников.

Давайте напишем код для загрузки содержимого файла YAML (с помощью функции safe_load() ) и вывода загруженного содержимого в консоль.

# Import YAML module  import yaml  # Load the YAML file  with open('client.yaml') as fh:     # Convert the YAML data into a dictionary      dictionary_data = yaml.safe_load(fh)  # Print the dictionary data  print(dictionary_data) 

В выводе получаем список словарей:

[{'name': 'Kamal Hossain', 'email': 'kamal@gmail.com', 'mobile': '01843456790'}, {'name': 'Sakil Ahamed', 'email': 'sakil@gmail.com', 'mobile': 1858717459}, {'name': 'Mizanur Rahman', 'email': 'mizan@gmail.com', 'mobile': '01936784534'}]

Заключение

В этой статье мы на нескольких примерах разобрали, как читать файлы YAML в Python. Конечно, с практикой придёт большее понимание, как работать с библиотекой PyYAML. А сейчас  можно запустить код из примеров, которые мы привели выше, и удостовериться, что тема чтения файлов YAML полностью понятна.

chtenie yaml fajlov v python pri pomoshhi modulja pyyaml 36c993c - Чтение YAML-файлов в Python при помощи модуля PyYAML

Кодинг-марафон по Python

Реши 10 задач и выиграй 5500 рублей

Подписаться ×

  • 4 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

    Связаться со мной
    Close