如何在Python中的配置文件中存储格式化的字符串?

时间:2014-12-12 05:47:20

标签: python configuration string-formatting configuration-files configparser

我在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,但另一种选择可能是可以接受的。 (我知道你不能只是打印字符串并让它神奇地显示你想要的样子,我只是想证明我想做什么。)

3 个答案:

答案 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