首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何转义configobj值中的%符号?

如何转义configobj值中的%符号?
EN

Stack Overflow用户
提问于 2010-10-28 22:33:55
回答 5查看 9.4K关注 0票数 12

我想对configobj配置文件的值同时使用解析时间和运行时插值。在Python语言中进行简单的字符串插值最简单的方法是"%(foo)s" % somedict。不幸的是,configobj使用了同样的插值机制,我还没有找到一种方法来摆脱它。理想情况下,我的值应该如下所示:

代码语言:javascript
复制
othervar = foo
someconfigobjkey = %(othervar)s %%(runtimevar)s

然而,configobj尝试(但失败了)替换第二个变量。回答这个问题的另一种方法是提供一种不同的(configobj)方法来同时进行解析时间和运行时插值。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-28 22:46:17

答案的新版本:

您可以使用"".format() (Python2.6或更高版本)或string.Template (Python2.4或更高版本)进行运行时插值--这两种方法都可以消除冲突。

(旧版本假定使用标准的ConfigParser模块,因此有这样的注释。)

票数 1
EN

Stack Overflow用户

发布于 2015-07-07 21:36:49

自从这个问题发布后,事情可能发生了变化,但我发现你可以使用'%‘字符进行转义。这对我在Python3中很有效。

在config.ini文件中:

代码语言:javascript
复制
[LOGGING]
format = %%(asctime)-15s %%(message)s

在我的python脚本文件中:

代码语言:javascript
复制
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'

希望它能在未来帮助某些人(:

票数 11
EN

Stack Overflow用户

发布于 2010-10-28 22:52:24

是的,不幸的是,configobj不遵循标准的Python格式化规则,所以%%失败了,否则这将是正确的转义百分号的方法。在我看来这是一个设计上的缺陷。

我能想到的在configobj值中包含文字%(foo)s序列的唯一方法是确保该序列的一部分是由替换生成的:

代码语言:javascript
复制
>>> import configobj
>>> c= configobject.ConfigObj()
>>> c['foo']= 'bar'
>>> c['pc']= '%'
>>> c['v']= '%(foo)s %(pc)s(foo)s'
>>> c['v']
'bar %(foo)s'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4043898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档