Как использовать переменные, уже определенные в 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}