我正在Python 2.6中使用ConfigParser模块,并且希望从我的配置文件中加载格式化的字符串。此类字符串的示例如下:
[Section Name]
#in the config file
#tmp_string has value 'string'
my_string = 'This is a %s' % tmp_string
有没有一种很好的方法将这样的字符串保存在配置文件中?在加载配置文件之前,我不会知道字符串的值是什么,因此无法评估它,然后将其保存到文件或类似的文件中。显然,目前,当我加载字符串并将其打印出来时,会得到以下信息:
#config is the ConfigParser
my_string = config.get('Section Name', 'my_string')
print my_string
>>>>'This is a %s' % tmp_string
我很想得到输出:
>>>> This is a string
您如何实现的?我最好还是与ConfigParser在一起,但是可以接受另一个选项。 (我知道您不能只打印字符串并以神奇的方式显示出您想要的样子,我只是想证明我想做的事。)
最佳答案
如果在配置文件的同一部分中定义了tmp_string
,则可以使用特殊格式在同一部分的其他位置引用它:
因此,将其应用于您的示例:%(<variable name>)s
文件
[Section Name]
tmp_string = string ; must be in the same section
my_string = This is a %(tmp_string)s
现在,
myconfig.cfg
的值将被“迭代”或取回时替换为tmp_string
的值。即
from ConfigParser import ConfigParser
config = ConfigParser()
config.read('myconfig.cfg')
print(config.get('Section Name', 'my_string'))
输出:
This is a string
注意:通常无法引用当前部分之外的值。但是,如果它们在名为
my_string
的特殊部分中定义,则它们的值可以是。换句话说,以下配置文件将产生相同的结果:[DEFAULT]
tmp_string = string
[Section Name]
my_string = This is a %(tmp_string)s
如果在
DEFAULT
部分和同一部分中都定义了名称作为对其的引用,则同一部分中的“本地”值优先,并将被使用。