Python configparser — примеры

По факту бОльшая часть наворотов, которая используется в configparsere для нормальных людей не нужна. Да, модуль гибкий и навороченый, только вот зачем…

Следующие примеры работают со следующим ini файлом:

[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True
[SectionTwo]
FavoriteColor = Green
[SectionThree]
FamilyName: Johnson
[Others]
Route: 66
>>> import configparser
>>> Config = configparser.ConfigParser()
>>> Config
<configparser.ConfigParser object at 0xb5b7348c>
>>> Config.read(«/home/marckel/files/Projects/Python/tomorrow.ini»)
[‘/home/marckel/files/Projects/Python/tomorrow.ini’]
>>> Config.sections()
[‘SectionOne’, ‘SectionTwo’, ‘SectionThree’, ‘Others’]
создали объект типа configparser (кстати, в описалове идет ConfigParser — не сработало, надо строчными буквами)
дальше — прочитали файл tomorrow.ini
потом прочитали его секции
Теперь мы сочиняем вспомогательную функцию, чтобы получить настройки из конфига:
>>> def ConfigSectionMap(section):
    dict1 = {}
    options = Config.options(section)
    for option in options:
        try:
            dict1[option] = Config.get(section, option)
            if dict1[option] == -1:
                DebugPrint(«skip: %s» % option)
        except:
            print(«exception on %s!» % option)
            dict1[option] = None
    return dict1
Теперь собственно код:
>>> Name = ConfigSectionMap(«SectionOne»)[‘name’]
>>> Age = ConfigSectionMap(«SectionOne»)[‘age’]
>>> print («Hello %s. You are %s years old.» % (Name, Age))
Hello Derek. You are 30 years old.
Со строковыми переменными все замечательно. Однако как оно будет работать с булевыми переменными?
Для чтения логических переменных надо использовать Config.getboolean(section, option)
продолжим:
>>> single = Config.getboolean(«SectionOne», «single»)
>>> single
True
можно так же использовать getint() для получения целых чисел, аналогично — getfloat()
Строки ини-файла, начинающиеся с «;» «#» или «rem» (в верхнем или нижнем регистре) будут игнорироваться (вот последнее надо как раз проверить, не помню такого в офдокументации)
при записи ini файла скриптом все комментарии будут уничтожены

Код для создания нового конфигфайла:

# lets create that config file for next time…
cfgfile = open(«c:\\next.ini»,’w’)
# add the settings to the structure of the file, and lets write it out…
Config.add_section(‘Person’)
Config.set(‘Person’,’HasEyes’,True)
Config.set(‘Person’,’Age’, 50)
Config.write(cfgfile)
cfgfile.close()

Расширенное использование configparser

использование интерполяции позволяет понавертеть более гибкую подстановку параметров
Например ини файл:
[SectionOne]
Param1: Hello
Param2: World
[SectionTwo]
Param1: ${SectionOne:Param1} ${SectionOne:Param2}
[SectionThree]
Alpha: One
Bravo: Two
Charlie: ${Alpha} Mississippi
при использовании интерполяции:
>>> import configparser
>>> settings = configparser.ConfigParser()
>>> settings._interpolation = configparser.ExtendedInterpolation()
>>> settings.read(«/home/marckel/files/Projects/Python/tomorrow.ini»)
[‘/home/marckel/files/Projects/Python/tomorrow.ini’]
>>> settings.sections()
[‘SectionOne’, ‘SectionTwo’, ‘SectionThree’]
>>> settings.get(«SectionTwo», «Param1»)
‘Hello World’
>>> settings.get(«SectionThree», «Charlie»)
‘One Mississippi’

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