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

от автора

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 для автоматического преобразования строки в нужный тип данных.

Ещё о модуле

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

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

ссылка на оригинал статьи https://habrahabr.ru/post/329054/


Комментарии

Добавить комментарий

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