Подтвердить что ты не робот

Несколько конфигурационных файлов с Python ConfigParser

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Я могу создать следующие два файла: 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 говорит, что порядок чтения файлов определяется порядком, в котором имена файлов отображаются в списке, указанном для метода чтения,
  • ключи перезаписываются более поздними файлами, но это делается на более низком уровне параметра, а не на более высоком уровне раздела. Это означает, что если у вас есть параметры, которые не встречаются в более поздних файлах, даже если этот раздел действительно существует, будут использоваться параметры из более ранних файлов.