Python:带有自定义分隔符的格式字符串[重复]

Posted

技术标签:

【中文标题】Python:带有自定义分隔符的格式字符串[重复]【英文标题】:Python: format string with custom delimiters [duplicate] 【发布时间】:2016-06-05 02:26:28 【问题描述】:

已编辑

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

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 使用不同的分隔符。

【问题讨论】:

另见:pyformat.info/#custom_1 另见:***.com/questions/5466451/… 参见:***.com/questions/16433589/… 另见:***.com/questions/34214945/… 参见:(str.format 缺失值)***.com/questions/8997279/… 【参考方案1】:

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

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

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

输出

DATABASE = 
    'name': 'abc'

【讨论】:

不错的答案。如需进一步参考,***.com/questions/5466451/… Mhm... 我的字符串来自一个复杂的文件(Django 的 settings.py),我希望模板与它来自的文件相似。我当然可以做双重替换,但我正在寻找更优雅的解决方案【参考方案2】:

在 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() 不能替代成熟的沙盒兼容模板解决方案

【讨论】:

与 pystache github.com/defunkt/pystache 等替代模板系统相比如何? 这种方法不能很好地替代成熟的模板系统,因为这些系统旨在允许没有编程经验的设计人员完成基本任务。这种方法与以 python 为中心的项目更兼容,在该项目中,大多数或所有与代码交互的人都会知道一些 python。它基本上是在 str.format() 本身之上几个缺口,在 Jinja2 之下几个缺口。 github 链接现在失效了。 ReFormat 的实现在哪里?

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

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

将 NSDictionary 解析为带有自定义分隔符的字符串

使用带有自定义分隔符的 postgres 按字符大小复制文本文件

无法在 Antlr4 中实现带有自定义分隔符的 q 引用字符串

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

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