如何在configobj值中转义%符号?

Hel*_*hne 12 python interpolation escaping

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

othervar = foo
someconfigobjkey = %(othervar)s %%(runtimevar)s
Run Code Online (Sandbox Code Playgroud)

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

Hue*_*cio 11

自发布此问题以来,情况可能已发生变化,但我发现您可以使用'%'字符进行转义.这在Python 3中对我有用.

在我的config.ini文件中:

[LOGGING]
format = %%(asctime)-15s %%(message)s
Run Code Online (Sandbox Code Playgroud)

在我的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'
Run Code Online (Sandbox Code Playgroud)

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


Sve*_*ach 1

新版本的答案:

您可以使用 "".format() (Python 2.6 或更高版本)或 string.Template (Python 2.4 或更高版本)进行运行时插值 - 两者都可以消除冲突。

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