如何使用ConfigParser中已定义的变量

16 投票
3 回答
18600 浏览
提问于 2025-04-16 11:50

我在用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

撰写回答