Как использовать переменные, уже определенные в ConfigParser

Я использую ConfigParser в Python

config.ini

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

exe_dir: ${base_dir}/bin

Здесь я хочу, чтобы exp_dir стал /home/myhome/exp/bin not ${base_dir}/bin.

Это означает, что ${base_dir} будет заменено на /home/myhome/exp automatically.

Ответ 1

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

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

Например:

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

разрешит% (dir) s значение dir (frob в этом случае). Все эталонные расширения выполняются на спрос.

Пример:

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

exe_dir: %(base_dir)s/bin

Ответ 2

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

Ответ 3

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

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