13

已编辑

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

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

但是,当然raw_string.format(my_dictionary)会导致 KeyErro。

有没有办法使用不同的符号来使用.format()

这不是如何在 python 字符串中打印文字花括号字符并在其上使用 .format 的副本?因为我需要保持花括号原样并为 . 使用不同的分隔符.format

4

2 回答 2

14

我认为不可能使用替代分隔符。{{ }}对于不想被替换的花括号,您需要使用双花括号format()

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

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

输出

DATABASE = {
    'name': 'abc'
}
于 2016-02-23T10:06:40.107 回答
3

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

语境

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

问题

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

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

解决方案

我们编写了一个扩展原生 python 的自定义类str.format()

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

ReFormatExample001:自定义类的演示使用

  • 我们编写了一个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()
  • 不能替代成熟的沙盒兼容模板解决方案
于 2016-12-19T21:52:10.230 回答