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.7string.format()
允许自定义占位符语法的替代方法
问题
我们想在 python str.format() 中使用自定义占位符分隔符
string.format()
功能强大,但不支持修改占位符分隔符。
string.format()
使用花括号,这很常见并导致 Delimiter collision
string.format()
默认的解决方法是将分隔符加倍,这可能很麻烦。
解决方案
我们编写了一个扩展原生 python 的自定义类str.format()
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 按字符大小复制文本文件