2010-10-27 7 views
17

Beim Aufruf von ConfigParser.read können Sie eine Liste von Strings übergeben, die möglichen Positionen für Konfigurationsdateien entsprechen, und die Funktion gibt eine Liste der Dateien zurück, die erfolgreich gelesen wurden.Mehrere Konfigurationsdateien mit Python ConfigParser

Wie lautet das Standardverhalten, wenn mehrere Konfigurationsdateien mit überlappenden Abschnitten/Schlüsseln geladen werden? Verschieben spätere Dateien in der Liste Werte, die von früheren analysiert wurden? Ist der gesamte Abschnitt überschrieben oder nur widersprüchliche Schlüssel?

+1

Haben Sie versucht, mehrere Konfigurationsdateien zu erstellen und zu lesen, um zu sehen, was passieren würde? – snapshoe

Antwort

19

Nachdem sie um es zu testen, überschreibt ConfigParser die Schlüssel mit jedem aufeinander folgenden Datei, in welcher Reihenfolge die Dateien gelesen werden durch die Reihenfolge der Dateinamen in der Liste übergeben ConfigParser.read

4

Gerade bestimmt wird um ein Beispiel für weitere Details zu geben.

Ich kann die folgenden zwei Dateien erstellen: config1.ini

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

[unique1] 
test_unique = 101 

und config2.ini:

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

[unique2] 
test_unique = 102 

Dann, wenn ich folgendes laufen kann ich sehen, wie die configs aktualisiert werden (Ausgänge werden gezeigt, wie Kommentare nach den jeweiligen Druckauszügen):

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 
So 363.210

zusammenzufassen es erscheinen würde:

  • als @crasic sagt die Reihenfolge, in der die Dateien gelesen werden, wird durch die Reihenfolge bestimmt, in der die Dateinamen in der Liste angezeigt wird auf die Lesemethode gegeben,
  • Die Schlüssel werden von späteren Dateien überschrieben, aber dies geschieht auf der niedrigeren Optionsebene als auf der höheren Abschnittebene. Dies bedeutet, dass Optionen, die in späteren Dateien nicht vorkommen, selbst wenn der Abschnitt auftritt, dann die Optionen aus den früheren Dateien verwendet werden.