
Файлы INI используются для хранения данных конфигурации. Они используются не только операционной системой, но так-же и отдельными программами для определения дальнейшего своего поведения. INI-файл представляет из себя простой текстовый файл с определенной иерархической структурой. На самом деле все очень просто — [Раздел]->"Ключ"->"Значение".
Практически любое программное обеспечение способно запоминать (сохранять) своё состояние. Например, внешний вид и размеры окон, язык, имя пользователя. Файлы инициализации — один из самых простых способов. Файлы с расширением «.ini» широко распространены не только в мире Windows, но и в других системах, например ( FreeBSD, Linux как и для различных языков программирования и т.д.). Формат файла крайне простой, можно редактировать в любом текстовом редакторе.
Есть еще и другой формат — cfg. Оба формата очень похожи и выполняют одни и те же функции.
Формат файла
Не существует официальной спецификации формата, есть лишь общие принципы.
Формат INI‐файла очень прост: файл разделён на секции (или разделы), в каждой секции может находиться произвольное число записей вида «ключ=значение». Секции указываются в квадратных скобках. Имена ключей в разных секциях могут совпадать.
В INI‐файлах предусмотрены комментарии — это строки, начинающиеся (хотя совсем не обязательно начинающиеся, могут быть в лбом месте), с точки с запятой ;. В дальнейшем было разрешено в качестве начала комментария использовать символ решетка — #. Все, что находится после знака комментария и до конца строки не используется обработчиком. См. пример:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[секция_1] параметр1=значение1 ; Это комментарий параметр2=значение2 # То же комментарий параметр3= [секция_2] параметр1=значение1 # а можно так параметр2=значение2 ############ или так ))) #################### [секция_3] параметр1=значение1 # а можно так параметр2=значение2 [секция_3] key_without_value #пустое строковое значение здесь = |
Файл конфигурации состоит из разделов, каждый из которых начинается с [section] заголовка, за которым следуют записи ключа / значения, разделенные определенной строкой (= или : по умолчанию «=«). По умолчанию имена разделов чувствительны к регистру, но ключи нет. Из ключей и значений удалены начальные и завершающие пробелы. Значения могут быть опущены, это регламентировано спецификацией. Значения также могут занимать несколько строк, при условии, что они имеют отступ глубже, чем первая строка значения. В зависимости от режима анализатора пустые строки могут рассматриваться как части многострочных значений или игнорироваться.
Пример разбора ini-файла:
|
1 2 3 4 5 6 |
# входной файл конфигурации test.ini [section_a] string_val = hello bool_val = false int_val = 11 pi_val = 3.14 |
Рабочий код:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
try: from configparser import ConfigParser except ImportError: from ConfigParser import ConfigParser # ver. < 3.0 # instantiate config = ConfigParser() # parse existing file config.read('test.ini') # read values from a section string_val = config.get('section_a', 'string_val') bool_val = config.getboolean('section_a', 'bool_val') int_val = config.getint('section_a', 'int_val') float_val = config.getfloat('section_a', 'pi_val') # update existing value config.set('section_a', 'string_val', 'world') # add a new section and some values config.add_section('section_b') config.set('section_b', 'meal_val', 'spam') config.set('section_b', 'not_found_val', '404') # save to a file with open('test_update.ini', 'w') as configfile: config.write(configfile) |
Выходной файл — test-update.ini:
|
1 2 3 4 5 6 7 8 9 |
[section_a] string_val = world bool_val = false int_val = 11 pi_val = 3.14 [section_b] meal_val = spam not_found_val = 404 |