14

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

4

3 回答 3

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
于 2011-02-15T01:57:50.527 回答
9

用“%(foo)s”代替“${foo}”。(参见http://docs.python.org/library/configparser.html并搜索“interpolation”。这适用于普通的 ConfigParser 或 SafeConfigParser。)

于 2011-02-15T01:58:11.060 回答
4

在 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}
于 2016-02-28T23:36:30.013 回答