如何使用ConfigParser中已定义的变量
我在用Python的ConfigParser。
config.ini文件内容是:
[general]
name: my_name
base_dir: /home/myhome/exp
exe_dir: ${base_dir}/bin
在这里,我想要exp_dir
的值变成/home/myhome/exp/bin
,而不是${base_dir}/bin
。
这意味着${base_dir}
会自动替换成/home/myhome/exp
。
3 个回答
7
在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}
11
不要写 "${foo}",而是写 "%(foo)s"。你可以查看这个链接 http://docs.python.org/library/configparser.html,然后搜索“interpolation”(插值)。这个方法适用于普通的 ConfigParser 或者 SafeConfigParser。
25
你可以使用 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