Как я могу установить значения по умолчанию для SafeConfigParser? - PullRequest
17 голосов
/ 24 мая 2011

У меня есть файл конфигурации следующим образом:

[job]
mailto=bob
logFile=blahDeBlah.txt

Я хочу прочитать параметры, используя SafeConfigParser:

values = {} 
config = ConfigParser.SafeConfigParser()
try:
    config.read(configFile)
    jobSection = 'job'

    values['mailto'] = config.get( jobSection, 'mailto' )
    values['logFile'] = config.get( jobSection, 'logFile' )
    # it is not there
    values['nothingThere'] = config.get( jobSection, 'nothingThere' )
.... # rest of code

Последняя строка, конечно, выдаст ошибку. Как указать значение по умолчанию для метода config.get()?

Опять же, если у меня есть файл опций следующим образом:

[job1]
mailto=bob
logFile=blahDeBlah.txt

[job2]
mailto=bob
logFile=blahDeBlah.txt

Похоже, невозможно указать параметры по умолчанию для job1, отличные от параметров по умолчанию в разделе job2.

Ответы [ 4 ]

22 голосов
/ 24 мая 2011

Используйте параметр defaults для конструктора:

# class ConfigParser.SafeConfigParser([defaults[, dict_type]]) 
#
config = ConfigParser.SafeConfigParser({'nothingThere': 'lalalalala'})
...
...
# If the job section has no "nothingThere", "lalalalala" will be returned
# 
config.get(jobSection, 'nothingThere')
15 голосов
/ 08 декабря 2016

Вы также можете использовать файл ".ini" по умолчанию и читать его перед вашим текущим файлом конфигурации.

default.ini:

[job1]
mailto=jack
logfile=default.log

[job2]
mailto=john
logfile=default.log

config.ini:

[job1]
mailto=sparrow
logfile=blah.log

[job2]
logfile=blah2.log

разбор:

config = ConfigParser.SafeConfigParser()
config.read('default.ini')
config.read('config.ini')

print config.get('job1', 'mailto')
# -> sparrow (from config.ini)

print config.get('job1', 'logfile')
# -> blah.log (from config.ini)

print config.get('job2', 'mailto')
# -> john (from default.ini)

print config.get('job2', 'logfile')
# -> blah2.log (from config.ini)
8 голосов
/ 12 марта 2012

Вы можете использовать раздел [DEFAULT], чтобы установить значения по умолчанию для свойств, которые вы не определили в других разделах.

Например,

[DEFAULT]
checkout_root: /data/workspace

[pingpong]
name: Ping Pong App
checkout_root: /home/pingpong
src: %(checkout_root)s/src

[dingdong]
name: Ding Dong App
src: %(checkout_root)s/dingdong_src

Для звонкаприложение, значение src будет /data/workspace/dingdong_src

6 голосов
/ 26 апреля 2017

В Python 3 вы можете предоставить запасное значение для метода get () следующим образом:

values['nothingThere'] = config.get('job', 'nothingThere', fallback=0)
print(values['nothingThere'])
# -> 0
...