2011-02-15 7 views
10

que estoy usando ConfigParser en PythonCómo utilizar variables ya definidas en ConfigParser

config.ini es

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

exe_dir: ${base_dir}/bin 

Aquí quiero exp_dir se convierte en /home/myhome/exp/bin no ${base_dir}/bin.

Significa ${base_dir} sería sustituido en /home/myhome/exp automatically.

Respuesta

20

Puede utilizar la interpolación ConfigParser

Además de la funcionalidad básica, SafeConfigParser apoya interpolación. Esto significa que los valores pueden contener cadenas de formato que hacen referencia a otros valores en la misma sección, o valores en una sección especial PREDETERMINADA. Se pueden proporcionar valores predeterminados adicionales en la inicialización .

Por ejemplo:

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

resolvería el% (dir) s para el valor de dir (FROB en este caso). Todas las expansiones de referencia se realizan a pedido de .

Su ejemplo se convierte en:

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

exe_dir: %(base_dir)s/bin 
+0

@martineau Yup, corrigió mi respuesta. Gracias – Rod

6

En lugar de "$ {foo}", escribe "% (foo) s". (Ver http://docs.python.org/library/configparser.html y la búsqueda de "interpolación". Esto funciona ya sea para un ConfigParser ordinaria o una SafeConfigParser.)

+0

Mi problema está resuelto. Gracias – emeth

+4

¡Gracias! En mi código, la falta de 's' después de'% (foo) 'me volvió loco. A veces debes mirar primero la fuente, ¡antes de darte cuenta de que también está en los documentos! ;-) – cfi

1

En Python 3, puede utilizar ${base_dir}/bin, y el extended interpolation le permite utilizar las variables de otras secciones. Ejemplo:

[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} 
Cuestiones relacionadas