我在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
。
答案 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}/bin
,extended 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}