2010-10-27 15 views
17

Quando si chiama ConfigParser.read è possibile passare un elenco di stringhe corrispondenti a potenziali posizioni per i file di configurazione e la funzione restituisce un elenco di quei file che sono stati letti correttamente.Più file di configurazione con Python ConfigParser

Qual è il comportamento predefinito quando vengono caricati più file di configurazione con sezioni/chiavi che si sovrappongono? I file successivi nell'elenco sostituiscono i valori analizzati da quelli precedenti? L'intera sezione è sovrascritta o solo chiavi in ​​conflitto?

+1

Hai provato a creare e leggere più file di configurazione per vedere cosa accadrebbe? – snapshoe

risposta

19

Dopo aver preso in giro a testarlo, ConfigParser sovrascrive i tasti con ciascun file successivo, l'ordine in cui vengono letti i file è determinato dall'ordine dei nomi dei file nella lista passati a ConfigParser.read

4

Proprio per dare un esempio per ulteriori dettagli.

posso creare i seguenti due file: config1.ini

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

[unique1] 
test_unique = 101 

e config2.ini:

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

[unique2] 
test_unique = 102 

Poi se corro il seguente posso vedere come il file di configurazione vengono aggiornati (le uscite sono mostrati come commenti dopo le rispettive dichiarazioni di stampa):

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 
.210

Quindi, per riassumere sembrerebbe:

  • come @crasic dice l'ordine in cui vengono letti i file è determinato dall'ordine in cui i nomi dei file vengono visualizzati nell'elenco dato al metodo read,
  • i tasti vengono sovrascritti dai file successivi, ma questo viene eseguito a livello di opzione inferiore anziché a livello di sezione superiore. Ciò significa che se si dispone di opzioni che non si verificano nei file successivi, anche se la sezione si verifica, verranno utilizzate le opzioni dei file precedenti.
Problemi correlati