关于语法:Python:使用自定义分隔符格式化字符串

Python: format string with custom delimiters

本问题已经有最佳答案,请猛点这里访问。

编辑

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

1
2
3
4
5
raw_string ="""
    DATABASE = {
        'name': '{DB_NAME}'
   }
"""

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

是否有方法使用不同的符号与.format()一起使用?

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


我认为不可能使用替代定界符。您需要使用双花括号{{}}来替换不希望被format()替换的花括号:

1
2
3
4
5
6
7
8
inp ="""
DATABASE = {{
    'name': '{DB_NAME}'
}}"""


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

产量

1
2
3
DATABASE = {
    'name': 'abc'
}


在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()以支持任意分隔符占位符语法
  • 允许其他增强功能,如自定义格式化程序和筛选器

示例001:自定义ReFormat类的演示使用

  • 我们编写了一个自定义的ReFormat类,扩展了python str.format()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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()
  • 不打算替代全面的沙盒兼容模板解决方案