我在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,但另一种选择可能是可以接受的。 (我知道你不能只是打印字符串并让它神奇地显示你想要的样子,我只是想证明我想做什么。)
答案 0 :(得分:3)
如果在配置文件的同一部分中定义了tmp_string
,那么您可以使用特殊格式在同一部分的其他位置引用它:%(<variable name>)s
所以将它应用到你的例子中:
myconfig.cfg
档案
[Section Name]
tmp_string = string ; must be in the same section
my_string = This is a %(tmp_string)s
现在tmp_string
的值将是&#34; iterpolated&#34;或者在检索时将其替换为my_string
的值。
即
from ConfigParser import ConfigParser
config = ConfigParser()
config.read('myconfig.cfg')
print(config.get('Section Name', 'my_string'))
输出:
This is a string
注意:通常不能引用当前部分之外的值。但是,如果它们是在名为DEFAULT
的特殊部分中定义的,则它们的值可以是。{换句话说,以下配置文件将产生相同的结果:
[DEFAULT]
tmp_string = string
[Section Name]
my_string = This is a %(tmp_string)s
如果在DEFAULT
部分和同一部分中定义了名称作为对其的引用,那么&#34; local&#34;同一部分中的值优先,并且将是使用的值。
答案 1 :(得分:2)
the docs已经解释过的方式相同:
my_string='This is a %(tmp_string)s'
答案 2 :(得分:1)
这几天docs还指定了一种使用${}
作为格式化程序的方式,我发现它比%()s
更易于阅读和使用。
这些很容易实现:
请考虑以下名为.configfile
的配置文件:
[arbitrarySectionName]
tmp_string = any section
[Section Name]
my_string = Now you can read from ${arbitrarySectionName:tmp_string} not just DEFAULT
要正确解释这一点,您将在模块中完成
import configparser
config = configparser.ConfigParser(interpolation=configparser.ExtendedInterpolation())
config.read('.configfile')
print(config.get('Section Name', 'my_string'))
输出:
现在,您可以从任何部分读取内容,而不仅仅是DEFAULT