Python чтение yaml файла

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

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

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

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

Для начала

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

Чтобы установить 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.

Читайте также:  Html user account template

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

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

import yaml # Declare a python object with data books = [, , ] # 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)

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

[, , ] - 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)

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

Заключение

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

Источник

Работа с файлами в формате YAML#

YAML (YAML Ain’t Markup Language) — еще один текстовый формат для записи данных.

YAML более приятен для восприятия человеком, чем JSON, поэтому его часто используют для описания сценариев в ПО. Например, в Ansible.

Синтаксис YAML#

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

Еще одна схожесть с Python: комментарии начинаются с символа # и продолжаются до конца строки.

Список#

Список может быть записан в одну строку:

[switchport mode access, switchport access vlan, switchport nonegotiate] 

Или каждый элемент списка в своей строке:

- switchport mode access - switchport access vlan - switchport nonegotiate 

Когда список записан таким блоком, каждая строка должна начинаться с — (минуса и пробела), и все строки в списке должны быть на одном уровне отступа.

Словарь#

Словарь также может быть записан в одну строку:

Строки#

Строки в YAML не обязательно брать в кавычки. Это удобно, но иногда всё же следует использовать кавычки. Например, когда в строке используется какой-то специальный символ (специальный для YAML).

Такую строку, например, нужно взять в кавычки, чтобы она была корректно воспринята YAML:

command: "sh interface | include Queueing strategy:" 

Комбинация элементов#

Словарь, в котором есть два ключа: access и trunk. Значения, которые соответствуют этим ключам — списки команд:

access: - switchport mode access - switchport access vlan - switchport nonegotiate - spanning-tree portfast - spanning-tree bpduguard enable trunk: - switchport trunk encapsulation dot1q - switchport mode trunk - switchport trunk native vlan 999 - switchport trunk allowed vlan 
- BS: 1550 IT: 791 id: 11 name: Liverpool to_id: 1 to_name: LONDON - BS: 1510 IT: 793 id: 12 name: Bristol to_id: 1 to_name: LONDON - BS: 1650 IT: 892 id: 14 name: Coventry to_id: 2 to_name: Manchester 

Модуль PyYAML#

Для работы с YAML в Python используется модуль PyYAML. Он не входит в стандартную библиотеку модулей, поэтому его нужно установить:

Работа с ним аналогична модулям csv и json.

Чтение из YAML#

Попробуем преобразовать данные из файла YAML в объекты Python.

- BS: 1550 IT: 791 id: 11 name: Liverpool to_id: 1 to_name: LONDON - BS: 1510 IT: 793 id: 12 name: Bristol to_id: 1 to_name: LONDON - BS: 1650 IT: 892 id: 14 name: Coventry to_id: 2 to_name: Manchester 

Чтение из YAML (файл yaml_read.py):

import yaml from pprint import pprint with open('info.yaml') as f: templates = yaml.safe_load(f) pprint(templates) 

Формат YAML очень удобен для хранения различных параметров, особенно, если они заполняются вручную.

Запись в YAML#

Запись объектов Python в YAML (файл yaml_write.py):

import yaml to_yaml =  'access': ['switchport mode access', 'switchport access vlan', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable'], 'trunk': ['switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan'], > with open('sw_templates.yaml', 'w') as f: yaml.dump(to_yaml, f) with open('sw_templates.yaml') as f: print(f.read()) 

Файл sw_templates.yaml выглядит таким образом:

access: - switchport mode access - switchport access vlan - switchport nonegotiate - spanning-tree portfast - spanning-tree bpduguard enable trunk: - switchport trunk encapsulation dot1q - switchport mode trunk - switchport trunk native vlan 999 - switchport trunk allowed vlan 

Источник

Оцените статью