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

时间:2011-02-15 01:45:19

标签: python 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 automatically

3 个答案:

答案 0 :(得分:21)

您可以使用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

答案 1 :(得分:6)

而不是“$ {foo}”,写下“%(foo)s”。 (请参阅http://docs.python.org/library/configparser.html并搜索“插值”。这适用于普通的ConfigParser或SafeConfigParser。)

答案 2 :(得分:2)

在Python 3中,您可以使用${base_dir}/binextended 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}