使用自定义分隔符格式化字符串[重复]

问题描述 投票:0回答:2

我必须使用字典中的值格式化字符串,但该字符串已经包含大括号。例如:

raw_string = """
    DATABASE = {
        'name': '{DB_NAME}'
   }
"""

但是,当然,

raw_string.format(my_dictionary)
会导致KeyError。

有没有办法使用不同的符号与

.format()
一起使用?

这不是如何在使用 .format 时转义字符串中的大括号 ({}) 字符? 的重复,因为我需要保持大括号原样并为

.format
使用不同的分隔符.

python syntax format string-interpolation cheetah
2个回答
15
投票

我认为不可能使用替代分隔符。您需要使用双大括号

{{
}}
来表示您不想用
format()
替换的大括号:

inp = """
DATABASE = {{
    'name': '{DB_NAME}'
}}"""

dictionary = {'DB_NAME': 'abc'}
output = inp.format(**dictionary)
print(output)

输出

DATABASE = {
    'name': 'abc'
}

3
投票

在 python 中使用自定义占位符标记
string.format()

背景

  • python 2.7
  • string.format()
  • 允许自定义占位符语法的替代方法

问题

我们想在 python str.format() 中使用自定义占位符分隔符

  • string.format()
    功能强大,但不原生支持占位符分隔符修改。
  • string.format()
    使用大括号,这很常见,并且会导致 分隔符冲突
  • string.format()
    默认解决方法是将分隔符加倍,这可能很麻烦。

解决方案

我们编写了一个扩展原生 python 的自定义类

str.format()

  • 使用自定义类扩展原生 python
    string.Formatter
  • 配置
  • string.format()
     以支持任意分隔符占位符语法
  • 允许其他增强功能,例如自定义格式化程序和过滤器
Example001:演示使用自定义

ReFormat

    我们编写了一个自定义的
  • ReFormat
     类,它扩展了 python 
    str.format()
    
    
# import custom class import ReFormat # prepare source data odata = { "fname" : "Planet", "lname" : "Earth", "age" : "4b years", } # format output using .render() # method of custom ReFormat class # vout = ReFormat.String("Hello <%fname%> <%lname%>!",odata).render() print(vout)
陷阱

    需要扩展课程到
  • str.format()
    
    
  • 无意替代成熟的沙箱兼容模板解决方案
  • str.format 在使用这种方法时存在精确保留大括号周围空白的问题
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.