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 рублей

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

  • 7 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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

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