2011-02-15 4 views

risposta

20

È possibile utilizzare l'interpolazione ConfigParser

In cima alla funzionalità di base, SafeConfigParser supporta interpolazione. Ciò significa che i valori possono contenere stringhe di formato che fanno riferimento a altri valori nella stessa sezione o valori in una sezione speciale PREDEFINITO. Ulteriori impostazioni predefinite possono essere fornite sull'inizializzazione .

Ad esempio:

[My Section] 
foodir: %(dir)s/whatever 
dir=frob 
long: this value continues  
    in the next line 

risolverebbe il% (dir) s al valore di dir (frob in questo caso). Tutte le espansioni di riferimento vengono eseguite su richiesta .

Il vostro esempio diventa:

[general] 
name: my_name 
base_dir: /home/myhome/exp 

exe_dir: %(base_dir)s/bin 
+0

@martineau Sì, ha corretto la mia risposta. Grazie – Rod

6

Invece di "$ {FOO}" e, scrivere "% (foo) s". (Vedere http://docs.python.org/library/configparser.html e cercare "interpolazione". Questo funziona sia per una ConfigParser ordinario o un SafeConfigParser.)

+0

Il mio problema è risolto. Grazie – emeth

+4

Grazie! Nel mio codice, il 's mancante 'dopo il'% (foo) 'mi ha fatto impazzire. A volte devi prima guardare la fonte, prima di rendertene conto che è anche nei documenti! ;-) – cfi

1

In Python 3, è possibile utilizzare ${base_dir}/bin, e il extended interpolation consente di utilizzare le variabili da altre sezioni. Esempio:

[Common] 
home_dir: /Users 
library_dir: /Library 
system_dir: /System 
macports_dir: /opt/local 

[Frameworks] 
Python: 3.2 
path: ${Common:system_dir}/Library/Frameworks/ 

[Arthur] 
nickname: Two Sheds 
last_name: Jackson 
my_dir: ${Common:home_dir}/twosheds 
my_pictures: ${my_dir}/Pictures 
python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}