ConfigParser
— Парсер файла конфигурации¶
Note
The ConfigParser
module has been renamed to configparser
in
Python 3. The 2to3 tool will automatically adapt imports when
converting your sources to Python 3.
Этот модуль определяет класс ConfigParser
. Он реализует
язык базового парсера файла конфигурации, который предоставляет
структуру, похожую на то, что Вы видите в файлах INI Windows. Вы можете
использовать его для написания программ на Pythonб которые легко могут
настраиваться пользователями.
Note
В данном переводе “секция” то же, что и “раздел”.
Note
Эта библиотека не интерпретирует или записывает префиксы типа значения, используемые в версии Windows Registry extended синтаксиса INI.
See also
Конфигурационный файл сосотоит из разделов, начинающихся с заголовка
[section]
, за которым идут записи вида имя: значение
с продолжениями
в стиле RFC 822 (см раздел 3.1.1, “LONG HEADER FIELDS”); кроме
того можно использовать вид name=value
. Имейте ввиду, что пробелы в
начале значения удаляются. Опциональные значения могут содержать строки формата,
которые ссылаются на другие значения в этом же разделе или значения
в специальном разделе DEFAULT
. Дополнительные значения по умолчанию
могут быть предоставлены для инициализации и восстановления. Строки, начинающиеся
с '#'
или ';'
игнорируются и могут быть использованы как комментарии.
Конфигурационные файлы могут содержать комментарии, предваряемые знаками #
и ;
). Комментарии могут располагаться на отдельной строке или
могут находиться в строке, содержащей значения или названия разделов. В последнем
случае им должен предшествовать пробел, чтобы их можно было распознать как комментарий.
(Для обратной совместимости только ;
начинает комментарий в непустой строке, но не #
.)
Кроме основной функциональности, класс SafeConfigParser
поддерживает интерполяцию.
Это означает, что значения могут содержать форматированные строки, которые ссылаются на
другие значения в том же разделе или на значения в специальном разделе
DEFAULT
. Дополнительные значения по умолчанию могут быть предоставлены при инициализации.
Например:
[My Section]
foodir: %(dir)s/whatever
dir=frob
long: это значение продолжается
на следующей строке
разрешит %(dir)s
в значение dir
(frob
в этом примере).
Все такие разрешения происходят по запросу.
Значения по умолчанию можно определить, передав их в конструктор ConfigParser
при помощи словаря. Дополнительные значения по умолчанию можно передать
в метод get()
, который переопределит другие значения.
Разделы обычно хранятся как встроенные словари. Альтернативный тип словаря может
быть передан конструктору ConfigParser
. Например, если переданный тип словаря
сортирует свои ключи, то разделы будут отсортированы при обратной записи,
как и ключи в каждом разделе.
-
class
ConfigParser.
RawConfigParser
([defaults[, dict_type[, allow_no_value]]])¶ Базовый объект конфигурации. Когда передан defaults, то его значения используются для задания значений по умолчанию. Если задан dict_type, то он будет использоваться для создания объекта словаря для списка разделов, для опций в разделах и для значений по умолчанию. Если allow_no_value=True (по умолчанию:
False
), то опции могут не содержать значений; в таком случае значением будетNone
.Этот класс не поддерживает “волшебной” интерполяции.
Все имена опций передаётся через метод
optionxform()
. Его реализация по умолчанию преобразует все имена в нижний регистр.New in version 2.3.
Changed in version 2.6: добавлен dict_type.
Changed in version 2.7: dict_type по умолчанию -
collections.OrderedDict
. добавлено allow_no_value.
-
class
ConfigParser.
ConfigParser
([defaults[, dict_type[, allow_no_value]]])¶ Класс-наследник от
RawConfigParser
, который реализует “волшебную” интерполяцию и добавляет опциональные аргументы в методыget()
иitems()
. Значения в defaults должны подходить для интерполяции строк при помощи%()s
. Обратите внимание, что __name__ неизменяем по умолчанию; его значением является имя раздела и оно будет переопределять любые значения находящиеся в defaults.Имена всех опций, используемых в интерполяции будут переданы через метод
optionxform()
так же, как любые другие ссылки на имена опций. При реализации по умолчанию методаoptionxform()
, значенияfoo %(bar)s
иfoo %(BAR)s
эквивалентны.New in version 2.3.
Changed in version 2.6: добавлен dict_type.
Changed in version 2.7: dict_type по умолчанию -
collections.OrderedDict
. добавлено allow_no_value.
-
class
ConfigParser.
SafeConfigParser
([defaults[, dict_type[, allow_no_value]]])¶ Наследник класса
ConfigParser
, который реализует более вменяемый варинат “волшебной” интерполяции. Эта реализация также более предсказуема. Новые приложения должны выбирать эту версию, если им не нужна совместимость с более старыми версиями Python.New in version 2.3.
Changed in version 2.6: добавлен dict_type.
Changed in version 2.7: dict_type по умолчанию -
collections.OrderedDict
. добавлено allow_no_value.
-
exception
ConfigParser.
Error
¶ Базовый класс для всех исключений модуля.
-
exception
ConfigParser.
NoSectionError
¶ Исключение, возбуждаемое, когда определённый раздел не найден.
-
exception
ConfigParser.
DuplicateSectionError
¶ Исключение возбуждается если
add_section()
вызывается с имененем раздела, который уже существует.
-
exception
ConfigParser.
NoOptionError
¶ Исключение возбуждается еогда поределённая опция не найдена в определённом разделе.
-
exception
ConfigParser.
InterpolationError
¶ Базовый класс для исключений, возникающий при проблемах со строковой интерполяции.
-
exception
ConfigParser.
InterpolationDepthError
¶ Исключение, возникающее когда интерполяция строки не может быть завершена так как число итераций превысило
MAX_INTERPOLATION_DEPTH
. ПодклассInterpolationError
.
-
exception
ConfigParser.
InterpolationMissingOptionError
¶ Исключения, возникающее, когда опция, на которую ссылается значение, не существует. Подкласс
InterpolationError
.New in version 2.3.
-
exception
ConfigParser.
InterpolationSyntaxError
¶ Исключение, возникающее, когда исходный текст, в который должна быть сделана подстановка, не отвечает требуемуму синтаксису. Подкласс
InterpolationError
.New in version 2.3.
-
exception
ConfigParser.
MissingSectionHeaderError
¶ Исключение, возникающее, когда пытаются разобрать файл, который не содержит заголовки разделов.
-
exception
ConfigParser.
ParsingError
¶ Исключение, возникающее, когда ошибка возникает при попытке разобрать файл.
-
ConfigParser.
MAX_INTERPOLATION_DEPTH
¶ Максимальная глубина рекурсивной интерполяции для
get()
, если raw=False. Это актуально только для классаConfigParser
.
See also
- Модуль
shlex
- Поддержка шелл-подобных мини-языков Unix, которые можно использовать как альтернативный
- формат для файлов конфигурации.
RawConfigParser Objects¶
Экземпляры RawConfigParser
имеют следующие методы:
-
RawConfigParser.
defaults
()¶ Возвращает словарь, содержащий значения по умолчанию для экземпляра.
-
RawConfigParser.
sections
()¶ Возвращает список доступных разделов;
DEFAULT
не присутствует.
-
RawConfigParser.
add_section
(section)¶ Добавляет раздел с именем section в экзмепляр. Если раздел с таким имененм уже существует, возбуждается
DuplicateSectionError
. Если передано имяDEFAULT
(или любой вариант его написания), возбуждается исключеинеValueError
.
-
RawConfigParser.
has_section
(section)¶ Сообщает, присутствует ли переданный раздел в конфигурации. Раздел
DEFAULT
не распознаётся.
-
RawConfigParser.
options
(section)¶ Возвращает список доступных опций в указанном разделе.
-
RawConfigParser.
has_option
(section, option)¶ Если данный раздел существует и содержит данную опцию, возвращает
True
; иначе -False
.New in version 1.6.
-
RawConfigParser.
read
(filenames)¶ Пробует прочитать и разобрать список имён файлов, возвращая список имён файлов, которые удалось разобрать. Если filenames - строка или юникод, то она трактуется как имя одного файла. Если filenames не может быть открыт, то такой файл игнорируется. Это сделано специально, чтобы Вы могли определить список мест, где могут находиться файлы конфигурации (напирмер, текущий каталог, домашний каталог пользователя, какие-то системные каталоги) и все существующие конфигурационные файлы в списке будут прочитаны. Если ни один из указанных файлов не существует, то экземпляр
ConfigParser
будет содержать пустой набор данных. Если приложению нужны начальные значения из файла/файлов, должно загрузить их при помощиreadfp()
до вызоваread()
для всех остальных опциональных файлов:import ConfigParser, os config = ConfigParser.ConfigParser() config.readfp(open('defaults.cfg')) config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])
Changed in version 2.4: Возвращает список удачно разобранных имён файлов.
-
RawConfigParser.
readfp
(fp[, filename])¶ Прочитывает и разбирает конфигурационные настройки из файла или файло-подобного объекта fp (используется только метод
readline()
). Если filename не указано и fp имеет атрибуетname
, то он используется вместо filename; по умолчанию<???>
.
-
RawConfigParser.
get
(section, option)¶ Получить значение option для раздела section.
-
RawConfigParser.
getint
(section, option)¶ Общепринятый метод для преобразования option в определённом section в число.
-
RawConfigParser.
getfloat
(section, option)¶ Общепринятый метод для преобразования option в определённом section в число с плавающей точкой.
-
RawConfigParser.
getboolean
(section, option)¶ Общепринятый метод для преобразования option в определённом section в логическое значение. Обратите внимание, что допустимыми значениями для опции являются
"1"
,"yes"
,"true"
, и"on"
, для которых метод вернётTrue
, и"0"
,"no"
,"false"
, и"off"
, для которых он вернётFalse
. Эти строковые значения проверяются независимо от регистра. Все другие значения будут вызыватьValueError
.
-
RawConfigParser.
items
(section)¶ Возвращает список пар
(имя, значение)
для каждой опции в разделе section.
-
RawConfigParser.
set
(section, option, value)¶ Если указанный раздел существует, задаёт определённой опции данное значение. В противном случае вызывает
NoSectionError
. Так как возможно использоватьRawConfigParser
(илиConfigParser
с сырыми параметрами, установленными в true) для внутреннего хранения нестроковых значений, полная функциональность (включая интерполяцию и вывод в файл) может быть доступна только при использовании строковых значений.New in version 1.6.
-
RawConfigParser.
write
(fileobject)¶ Записывает представление конфигурации в данный объект файла. Это представление можно в будущем разобрать при помощи вызова
read()
.New in version 1.6.
-
RawConfigParser.
remove_option
(section, option)¶ Удаляет данную опцию option из данного раздела section. Если раздел не существует, вызывается
NoSectionError
. Если опция была удалена, возвращаетTrue
; иначе -False
.New in version 1.6.
-
RawConfigParser.
remove_section
(section)¶ Удаляет данный раздел section из конфигруации. Если этот раздел существовал, возвращает
True
, иначе -False
.
-
RawConfigParser.
optionxform
(option)¶ Преобразует имя опции option из того, каким оно указано в файле или получено из кода в форму, которая должна использоваться во внутреннем представлении. Реализация по умолчанию возвращает имя опции в нижнем регистре. Подклассы могут переопределять это поведение или же клиентский код может установить этот атрибут для экзмемпляра класса, чтобы повлиять на это поведение.
Вам не обязательно иметь подкласс ConfigParser, чтобы использовать этот метод. Вы также можете заменить его для экземлпяра на функцию, которая принимает строковый аргумент. Если, например, вместо него использовать
str
, то имена ваших опций будут зависеть от регистра:cfgparser = ConfigParser() ... cfgparser.optionxform = str
Обратите внимание, что когда читается конфигурационный файл, пробелы вокруг имеён опций удаляются до вызова
optionxform()
.
ConfigParser Objects¶
Класс ConfigParser
расширяет некоторые методы интерфейса
RawConfigParser
, добавляя некоторые опциональные аргументы.
-
ConfigParser.
get
(section, option[, raw[, vars]])¶ Получает значение опции option из раздела section. Если передан vars, то он должен быть словарём. Опция option последовательно ищется в vars (если есть), section, и затем в defaults.
Все интерполяции
'%'
расширяются в возвращаемом значении, только если аргумент raw истинен. Значения для интерполяции ключей ищутся также, как для значений.
Объекты SafeConfigParser¶
Класс SafeConfigParser
реализует такой же расширенный интерфейс, что и
ConfigParser
, со следующими дополнениями:
-
SafeConfigParser.
set
(section, option, value)¶ Если переданный раздел существует, устанавливает переданную опцию в переданное значение. В противном случае вызывается
NoSectionError
. value должно быть строкой (str
илиunicode
); в противном случае вызываетсяTypeError
.New in version 2.4.
Примеры¶
Пример записи в конфигурационный файл:
import ConfigParser
config = ConfigParser.RawConfigParser()
# Когда добавляем разделы или элементы, добавляйте их в обратном порядке от того,
# как Вы хотите, чтобы они отображались в итоговом файле.
# Кроме того, обратите внимание, что используя RawConfigParser's и "сырой" режим
# функции set ConfigParser'а, Вы можете внутренне присвоить не-строковые значения
# для ключей, но получите ошибку при попытке записать это в файл или если Вы
# используете не "сырой" режим.
# SafeConfigParser не позволяет делать такое присваивание.
config.add_section('Section1')
config.set('Section1', 'an_int', '15')
config.set('Section1', 'a_bool', 'true')
config.set('Section1', 'a_float', '3.1415')
config.set('Section1', 'baz', 'fun')
config.set('Section1', 'bar', 'Python')
config.set('Section1', 'foo', '%(bar)s is %(baz)s!')
# Запись конфигурации в файл 'example.cfg'
with open('example.cfg', 'wb') as configfile:
config.write(configfile)
Пример чтения конфигурационного файла:
import ConfigParser
config = ConfigParser.RawConfigParser()
config.read('example.cfg')
# getfloat() вызовет исключение, если значение не является float
# getint() и getboolean() приведут к тому же в соответствующих случаях
a_float = config.getfloat('Section1', 'a_float')
an_int = config.getint('Section1', 'an_int')
print a_float + an_int
# Обратите внимание, что следующий вывод не приведёт к интерполяции '%(bar)s' или '%(baz)s'.
# Потому что мы используем RawConfigParser().
if config.getboolean('Section1', 'a_bool'):
print config.get('Section1', 'foo')
Для того, чтобы использовать интерполяцию, Вам нужен ConfigParser
или
SafeConfigParser
:
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('example.cfg')
# Передайте в качестве третьего, необязательного аргумента 1, если Вы хотите использовать "сырой" режим.
print config.get('Section1', 'foo', 0) # -> "Python is fun!"
print config.get('Section1', 'foo', 1) # -> "%(bar)s is %(baz)s!"
# Необязательным четвёртым аргументом может быть словрь, чьё содержимое будет исопльзоваться
# для интерполяции.
print config.get('Section1', 'foo', 0, {'bar': 'Documentation',
'baz': 'evil'})
Значения по умолчанию доступны для всех трёх типов ConfigParsers. Они используются для интерполяциии если требуемое для неё значение нигде не определено.
import ConfigParser
# Новый экземпляр со значениями по умолчанию 'bar' и 'baz' равными 'Life' и 'hard'
config = ConfigParser.SafeConfigParser({'bar': 'Life', 'baz': 'hard'})
config.read('example.cfg')
print config.get('Section1', 'foo') # -> "Python is fun!"
config.remove_option('Section1', 'bar')
config.remove_option('Section1', 'baz')
print config.get('Section1', 'foo') # -> "Life is hard!"
Функция opt_move
может быть использована для перемещения опций между разделами:
def opt_move(config, section1, section2, option):
try:
config.set(section2, option, config.get(section1, option, 1))
except ConfigParser.NoSectionError:
# Создаём несуществующую секцию
config.add_section(section2)
opt_move(config, section1, section2, option)
else:
config.remove_option(section1, option)
Некоторые конфигурационные файлы содержат настройки без значений,
которые, тем не менее, соответствуют синтаксису, поддерживаемому
ConfigParser
. Параметр
allow_no_value, переданный в конструктор, может быть использован для
обозначения того, что эти опции тоже должны учитываться: