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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:使用自定义分隔符格式化字符串[重复]相关的知识,希望对你有一定的参考价值。

EDITED

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

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

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

有没有办法使用不同的符号与.format()一起使用?

这不是How can I print literal curly-brace characters in python string and also use .format on it?的重复,因为我需要保持大括号,并为.format使用不同的分隔符。

答案

Using custom placeholder tokens with python string.format()

上下文

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

问题

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

  • string.format()功能强大,但没有对占位符分隔符修改的原生支持。
  • string.format()使用花括号,这是非常常见的,并导致Delimiter collision
  • 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()
  • 不打算替代完整的沙盒兼容模板解决方案
另一答案

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

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

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

产量

DATABASE = {
    'name': 'abc'
}

以上是关于Python:使用自定义分隔符格式化字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义分隔符将数字格式化为字符串? [复制]

使用自定义组和小数分隔符将数字格式化为字符串而不更改精度

如何在 Python Pandas 中使用逗号作为小数分隔符的浮点格式?

从自定义数据格式创建火花数据框

对十进制数使用自定义字符串格式c#

在Python中使用多个分隔符拆分字符串[重复]