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/
Добавить комментарий