san*_*lto 3 python string formatting
我正在尝试对我的字符串上的参数进行一些"post"/"lazy"评估.假设我是这样的:
s = "SELECT * FROM {table_name} WHERE {condition}"
Run Code Online (Sandbox Code Playgroud)
我想用{table_name}替换后的字符串返回字符串,但不是{condition},所以,这样的东西:
s1 = s.format(table_name = "users")
Run Code Online (Sandbox Code Playgroud)
所以,我可以在以后构建孔字符串,如:
final = s1.format(condition= "user.id = {id}".format(id=2))
Run Code Online (Sandbox Code Playgroud)
结果当然应该是:
"SELECT * FROM users WHERE user.id = 2"
Run Code Online (Sandbox Code Playgroud)
我已经找到了之前的答案,这正是我需要的,但我想使用format字符串函数.
python,格式字符串 谢谢你的帮助!
您可以用自己替换条件:
s.format(table_name='users', condition='{condition}')
Run Code Online (Sandbox Code Playgroud)
这给了我们:
SELECT * FROM users WHERE {condition}
Run Code Online (Sandbox Code Playgroud)
您可以稍后使用此字符串填写条件.
您不能使用format函数,因为它会引发KeyError.
string.Template 支持安全替代:
from string import Template
s = Template('SELECT * FROM $table_name WHERE $condition')
s.safe_substitute(table_name='users')
'SELECT * FROM users WHERE $condition'
Run Code Online (Sandbox Code Playgroud)
如果您使用普通变量名称(没有格式说明符,没有索引等等),这也将起作用(感谢@Simeon Visser的想法):
def myformat(s, *args, **kwargs):
while True:
try:
return s.format(*args, **kwargs)
except KeyError as e:
e=e.args[0]
kwargs[e] = "{%s}" % e
s = "SELECT * FROM {table_name} WHERE {condition}"
myformat(s, table_name="users")
'SELECT * FROM users WHERE {condition}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2837 次 |
| 最近记录: |