2011-02-15 2 views

ответ

20

Вы можете использовать ConfigParser интерполяции

В верхней части основной функциональности, SafeConfigParser поддерживает интерполяции. Это означает, что значения могут содержать строки формата, которые относятся к другим значениям в этом же разделе, или значений в специальном разделе DEFAULT. Дополнительные значения по умолчанию могут быть предоставлены на инициализации.

Например:

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

бы решить% (реж) с к значению из директории (Frob в данном случае). Все эталонные расширения производятся по адресу .

Ваш пример становится:

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

exe_dir: %(base_dir)s/bin 
+0

@martineau Yup, исправить мой ответ. Спасибо – Rod

6

Вместо "$ {Foo}", пишут "% (Foo) S". (См http://docs.python.org/library/configparser.html и поиск «интерполяции». Это работает как для обычного ConfigParser или SafeConfigParser.)

+0

Моя проблема решена. Спасибо – emeth

+4

Спасибо! В моем коде отсутствующие '' 'после'% (foo) 'сводили меня с ума. Иногда вам нужно сначала взглянуть на источник, прежде чем вы поймете, что это тоже в документах! ;-) – cfi

1

В Python 3, вы можете использовать ${base_dir}/bin и extended interpolation позволяет использовать переменные из других разделов. Пример:

[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} 
Смежные вопросы