我尝试用如下的花括号格式化字符串:
dct_mapper = dict(a=1)
s = '{key1: value2, key1: value2}; attrib1={a}; attrib2={b}'
s.format(**dct_mapper)
Results in:
# KeyError: 'key1'
Expected:
# '{key1: value2, key1: value2}; attrib1=1; attrib2={b}'另一个限制因素是,我需要在稍后的输出中使用.format_map(),这会使使用.format()的解决方案陷入困境,因为out花括号将消失。
我尝试了集合中的默认值包,也进入了地图(),然后用regex替换括号及附加括号,它感觉不太像解决方案,更像是黑客,而且如果字符串中有多个重复括号,那么它也不能工作。
它不是json字符串,因为这样我就可以使用json库来映射值。
有谁知道怎么解决这个问题吗?
目前,我考虑使用循环和str.replace('{a}', 1),但这也让人感到笨重。
发布于 2022-02-25 19:36:46
如果您不想将{}转换为{{}},我建议您使用string中的Template。它的接口允许您像下面所做的那样自定义格式选项:
from string import Template
class MyTemplate(Template):
    delimiter = ""
dct_mapper = dict(a=1)
s = MyTemplate('{key1: value2, key1: value2}; attrib1={a}; attrib2={b}')
print(s.safe_substitute(**dct_mapper))输出是,如您所愿:{key1: value2, key1: value2}; attrib1=1; attrib2={b}
说明:默认情况下,我Template使用$var而不是{var}格式化字符串,因此我将变量名($之后)的模式更改为${var},分隔符本身改为"",所以{var}就足够了,而不是${var}。
此外,模板有safe_substitute,它允许您格式化整个字符串中的几个变量,并且它不会对不存在的变量格式产生错误。
此外,如果您喜欢这样做,那么可以将s.safe_substitute(**dct_mapper)更改为s.safe_substitute(dct_mapper)。
https://stackoverflow.com/questions/71270767
复制相似问题