2010-10-27 18 views
17

Podczas wywoływania pliku ConfigParser.read można przesłać listę ciągów odpowiadających potencjalnym lokalizacjom dla plików konfiguracyjnych, a funkcja zwraca listę plików, które zostały pomyślnie odczytane.Wiele plików konfiguracyjnych z Python ConfigParser

Jakie jest zachowanie domyślne w przypadku ładowania wielu plików konfiguracyjnych z nakładającymi się sekcjami/kluczami? Czy późniejsze pliki na liście zastępują wartości analizowane przez wcześniejsze? Czy cała sekcja jest nadpisywana lub tylko sprzeczne klucze?

+1

Czy próbowałeś tworzyć i czytać wiele plików konfiguracyjnych, aby zobaczyć, co by się stało? – snapshoe

Odpowiedz

19

Po poruszanie się do testowania go, ConfigParser nadpisuje klucze z każdego kolejnego pliku, kolejność, w której pliki są odczytywane jest określona przez kolejność nazw plików na liście przekazywanych ConfigParser.read

4

Wystarczy dać przykład dla dalszych szczegółów.

mogę utworzyć następujące dwa pliki: config1.ini

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

[unique1] 
test_unique = 101 

i config2.ini:

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

[unique2] 
test_unique = 102 

Następnie jeśli uruchomię następujące widzę jak configs aktualizowane (wyjścia są pokazane jako komentarze po odpowiednich instrukcjach drukowania):

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 

więc podsumować wydaje:

  • jak @crasic mówi kolejność, w której pliki są czytane zależy od kolejności, w jakiej pojawiają się nazwy plików na liście danej metody odczytu,
  • klucze są zastępowane późniejszymi plikami, ale odbywa się to na niższym poziomie opcji, a nie na wyższym poziomie sekcji. Oznacza to, że jeśli masz opcje, które nie występują w późniejszych plikach, nawet jeśli sekcja się pojawi, to zostaną użyte opcje z wcześniejszych plików.
Powiązane problemy