我想对configobj配置文件的值同时使用解析时间和运行时插值。在Python语言中进行简单的字符串插值最简单的方法是"%(foo)s" % somedict。不幸的是,configobj使用了同样的插值机制,我还没有找到一种方法来摆脱它。理想情况下,我的值应该如下所示:
othervar = foo
someconfigobjkey = %(othervar)s %%(runtimevar)s然而,configobj尝试(但失败了)替换第二个变量。回答这个问题的另一种方法是提供一种不同的(configobj)方法来同时进行解析时间和运行时插值。
发布于 2010-10-28 22:46:17
答案的新版本:
您可以使用"".format() (Python2.6或更高版本)或string.Template (Python2.4或更高版本)进行运行时插值--这两种方法都可以消除冲突。
(旧版本假定使用标准的ConfigParser模块,因此有这样的注释。)
发布于 2015-07-07 21:36:49
自从这个问题发布后,事情可能发生了变化,但我发现你可以使用'%‘字符进行转义。这对我在Python3中很有效。
在config.ini文件中:
[LOGGING]
format = %%(asctime)-15s %%(message)s在我的python脚本文件中:
import configparser
# Load configuration
config = configparser.ConfigParser()
config.read("config.ini")
log_config = config['LOGGING']
print(log_config['format']) # prints out '%(asctime)-15s %(message)s'希望它能在未来帮助某些人(:
发布于 2010-10-28 22:52:24
是的,不幸的是,configobj不遵循标准的Python格式化规则,所以%%失败了,否则这将是正确的转义百分号的方法。在我看来这是一个设计上的缺陷。
我能想到的在configobj值中包含文字%(foo)s序列的唯一方法是确保该序列的一部分是由替换生成的:
>>> import configobj
>>> c= configobject.ConfigObj()
>>> c['foo']= 'bar'
>>> c['pc']= '%'
>>> c['v']= '%(foo)s %(pc)s(foo)s'
>>> c['v']
'bar %(foo)s'https://stackoverflow.com/questions/4043898
复制相似问题