Интересные стандартные модули Python — configparser

в 21:48, , рубрики: python, python3, конфиг, конфигурирование

Python поистине хороший и простой язык. И простота его заключена не только в синтаксисе, но и в готовых решениях, некоторые из которых весьма интересны. Недавно я наткнулся на одно из них и сейчас я предлагаю разобраться вам с модулем configparser на примере создания и парсинга простого конфигурационного файла.

О модуле

Как может быть ясно из вступления, модуль позволяет создавать конфигурационные файлы и парсить конфигурационные файлы определённого форматирования. Сам модуль идёт в поставке с python, так что скачивать его не придётся. Модуль устроен так, что позволяет работать с секциями и ячейками, как со словарём, что делает работу с ним весьма комфортной. Но также он имеет и встроенные методы для удалённого вызова. Созданные с ним файлы получаются такого формата:

[Section Name]
key 1 = sn1
key 2 = sn3
key 3 = sn3

[Another Section]
key 1 = as1
key 2 = as2
key 3 = as3

Практика — создание конфигурационного файла

Я не большой любитель делать что-то теоретическое, поэтому давайте создадим модуль, который будет делать .gitconfig:

import configparser
import os

conf = configparser.ConfigParser()
conf['user'] = {}
conf['user']['tname'] = 'Kit Scribe'
conf['user']['temail'] = 'myemail@example.com'

# добавим несколько алиасов
conf['aliases'] = {}
conf['aliases']['tsmerge'] = 'merge --squash'
conf['aliases']['tlogline'] = 'log --graph --oneline'
conf['aliases']['tcommend'] = 'commit --amend --no-edit'

# теперь файл нужно сохранить
path = os.path.expanduser('~')  # получаем домашнюю директорию
path = os.path.join(path, '.gitconfig')

with open(path, 'w') as f:
    conf.write(f)

Точно такой же результат можно получить используя методы класса:

conf.add_section('user')
conf.set('user', 'tuser.name', 'Kit Scribe')
conf.set('user', 'tuser.email', 'myemail@example.com')

conf.add_section('aliases')
conf.set('aliases', 'tsmerge', 'git merge --squash')
conf.set('aliases', 'tlogline', 'log --graph --oneline')
conf.set('aliases', 'tcommend', 'commit --amend --no-edit')

path = os.path.expanduser('~')
path = os.path.join(path, '.gitconfig')

with open(path, 'w') as f:
    conf.write(f)

Практика — парсинг

С созданием разобрались, осталось разобраться с парсингом. Давайте попробуем получить наши ключи:

import configparser
import os

path = os.path.expanduser('~')
path = os.path.join(path, '.gitconfig')

conf = configparser.ConfigParser()
conf.read(path)

# хоть мы и указывали символ табуляции, при чтении он уже не нужен,
# потому что все ключи обрабатываются через strip() функцию
print(conf['user']['name'])  # Kit Scribe
print(conf['user']['email'])  # myemail@example.com
aliases = conf['aliases']  # создаём ссылку
print(aliases['smerge'])
print(aliases['logline'])
print(aliases['commend'])
# если мы обратимся к несуществующему ключу, то получим ошибку
# но в этом может помочь fallback аргумент
print(conf.get('aliases', 'unknown', fallback='This key does not exist'))

Помимо метода get класс имеет такие методы как getint, getfloat и getboolean для автоматического преобразования строки в нужный тип данных.

Ещё о модуле

Сам модуль обширен в своём функционале и позволяет добавлять в свой словарь соотношения булевых значений, настраивать свой вариант чтения и записи и многое другое.

Полную же версию документации можно найти по ссылке

Автор: KitScribe

Источник

Поделиться

* - обязательные к заполнению поля