部分字符串格式

2024-06-26 02:06:06 发布

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

是否可以使用高级字符串格式化方法进行部分字符串格式化,类似于字符串模板safe_substitute()函数?

例如:

s = '{foo} {bar}'
s.format(foo='FOO') #Problem: raises KeyError 'bar'

Tags: 方法函数字符串模板formatfoobarsafe
3条回答

您可以通过覆盖映射将其转换为部分格式:

import string

class FormatDict(dict):
    def __missing__(self, key):
        return "{" + key + "}"

s = '{foo} {bar}'
formatter = string.Formatter()
mapping = FormatDict(foo='FOO')
print(formatter.vformat(s, (), mapping))

印刷

FOO {bar}

当然,这个基本实现只适用于基本情况。

如果你知道你是按什么顺序格式化的:

s = '{foo} {{bar}}'

像这样使用:

ss = s.format(foo='FOO') 
print ss 
>>> 'FOO {bar}'

print ss.format(bar='BAR')
>>> 'FOO BAR'

不能同时指定foobar-必须按顺序执行。

您可以使用functools中的partial函数,该函数很短,可读性最强,也最能描述编码器的意图:

from functools import partial

s = partial("{foo} {bar}".format, foo="FOO")
print s(bar="BAR")
# FOO BAR

相关问题 更多 >