如何在配置文件中逃离百分号(%)符号?

2024-10-06 11:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想对配置文件的值同时使用解析时间和运行时插值。在Python中执行简单字符串插值的最简单方法是"%(foo)s" % somedict。不幸的是,configobj使用相同的插值机制,我还没有找到逃逸它的方法。理想情况下,我的价值观是:

othervar = foo
someconfigobjkey = %(othervar)s %%(runtimevar)s

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


Tags: 方法字符串foo配置文件时间情况机制插值
3条回答

是的,不幸的是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'

自从这个问题发布后,情况可能发生了变化,但我发现您可以使用“%”字符进行转义。这在Python 3中对我有效。

在我的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'

希望它能帮助将来的人(:

答案的新版本:

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

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

相关问题 更多 >