2010-10-27 3 views
17

При вызове ConfigParser.read вы можете передать список строк, соответствующих потенциальным местоположениям файлов конфигурации, и функция возвращает список файлов, которые были успешно прочитаны.Несколько конфигурационных файлов с Python ConfigParser

Что такое поведение по умолчанию при загрузке нескольких файлов конфигурации с перекрывающимися разделами/ключами? Устанавливают ли более поздние файлы в списке значения, обработанные более ранними? Является ли весь раздел переопределенным или просто конфликтующим ключом?

+1

Вы пытались создать и прочитать несколько файлов конфигурации, чтобы узнать, что произойдет? – snapshoe

ответ

19

После того, как вокруг тестирования, ConfigParser перезаписывает ключи с каждым последующим файлом, порядок, в котором файлы считываются определяется порядком имен файлов в списке переданных ConfigParser.read

4

Просто чтобы привести пример для более подробной информации.

Я могу создать следующие два файла: config1.ini

# ** config1.ini ** 
[shared] 
prop_uniue1 = 1 
prop_shared = 10 

[unique1] 
test_unique = 101 

и config2.ini:

# ** config2.ini ** 
[shared] 
prop_uniue2 = 2 
prop_shared = 14 

[unique2] 
test_unique = 102 

Тогда, если я запускаю следующий я могу видеть, как конфиги обновляется (выходы показаны как комментарии после соответствующих заявлений о печати):

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.read(['config1.ini', 'config2.ini']) 


print config.sections() # ['shared', 'unique1', 'unique2'] 
print config.get("shared", "prop_uniue1") # 1 
print config.get("shared", "prop_shared") # 14 
print config.get("unique1", "test_unique") # 101 

print config.get("shared", "prop_uniue2") # 2 
print config.get("unique2", "test_unique") # 102 

Итак, подведем итог, казалось бы:

  • , как @crasic говорит порядок, в котором файлы считываются определяется порядком, в котором имена файлов отображаются в списке, приведенном в методе чтения,
  • ключи перезаписываются более поздними файлами, но это делается на более низком уровне параметра, а не на более высоком уровне раздела. Это означает, что если у вас есть параметры, которые не встречаются в более поздних файлах, даже если этот раздел действительно существует, будут использоваться параметры из более ранних файлов.
Смежные вопросы