Как сохранить ключи с заглавными буквами, считанные из конфиг-файла с помощью configparser?

При чтении файла конфигурации с пакетом configparser python все имена ключей являются строками нижнего регистра. Кто-нибудь знает, как читать строки, сохраняя заглавные и прописные слова?

Например:

$cat config.cfg 
[DEFAULT]
Key_1 = SomeWord
KEY_2 = Another Word

$ python3
>>> from configparser import ConfigParser
>>> cf = ConfigParser()
>>> cf.read('./config.cfg')
['./config.cfg']
>>> print(cf.defaults())
OrderedDict([('key_1', 'SomeWord'), ('key_2', 'Another Word')])

Спасибо за любую помощь!


person stevosn    schedule 07.09.2016    source источник
comment
Если объясните подробнее, ответов будет больше.   -  person turkus    schedule 07.09.2016
comment
Извините за дубликат.. Мне не пришло в голову слово case.. ^.^   -  person stevosn    schedule 07.09.2016


Ответы (1)


Да, все клавиши автоматически преобразуются в нижний регистр во время операций чтения/записи. Это упоминается в последнем предложении раздела "Быстрый старт" configparser документов< /а>.

Чтобы этого не произошло, вы можете установить для своих парсеров optionxform ( вызываемый), чтобы просто вернуть option, а не преобразовывать его в нижний регистр:

>>> from configparser import ConfigParser
>>> c = ConfigParser()
>>> c.optionxform = lambda option: option
>>> c.read('./config.cfg')
['./config.cfg']

Теперь ключи сохраняются в том виде, в каком они были определены:

>>> c.defaults()
OrderedDict([('Key_1', 'SomeWord'), ('KEY_2', 'Another Word')])

Конечно, вы можете настроить это по своему вкусу, если, например, вы хотите, чтобы все клавиши были в верхнем регистре, вы можете установить это в optionxform:

>>> cf = ConfigParser()
>>> cf.optionxform = lambda option: option.upper()
>>> cf.read('./config.cfg')
['./config.cfg']
>>> cf.defaults()
OrderedDict([('KEY_1', 'SomeWord'), ('KEY_2', 'Another Word')])
person Dimitris Fasarakis Hilliard    schedule 07.09.2016