我正在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部分和同一部分中都定义了名称作为对其的引用,则同一部分中的“本地”值优先,并将被使用。

09-26 02:26