Python:使用自定义分隔符格式化字符串
Python: format string with custom delimiters
已编辑
我必须使用字典中的值格式化字符串,但该字符串已包含大括号。例如:
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
.
使用不同的分隔符
我认为不可能使用其他分隔符。您需要使用双花括号 {{
}}
表示不想被 format()
:
替换的花括号
inp = """
DATABASE = {{
'name': '{DB_NAME}'
}}"""
dictionary = {'DB_NAME': 'abc'}
output = inp.format(**dictionary)
print(output)
输出
DATABASE = {
'name': 'abc'
}
将自定义占位符标记用于 python string.format()
上下文
- python 2.7
string.format()
- 允许自定义占位符语法的替代方法
问题
我们想将自定义占位符定界符与 python str.format()
一起使用
string.format()
很强大,但是没有原生支持占位符分隔符修改。
string.format()
使用非常常见的大括号并导致 Delimiter collision
string.format()
默认解决方法是将分隔符加倍,这可能很麻烦。
解决方案
我们写了一个扩展原生的自定义 class python str.format()
- 使用自定义 class
扩展原生 python string.Formatter
- 配置
string.format()
以支持任意定界符占位符语法
- 允许其他增强功能,例如自定义格式化程序和过滤器
Example001:演示使用自定义 ReFormat
class
- 我们编写了一个扩展 python
str.format()
的自定义 ReFormat
class
# 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)
陷阱
- 需要将 class 扩展到
str.format()
- 不能替代成熟的沙箱兼容模板解决方案
已编辑
我必须使用字典中的值格式化字符串,但该字符串已包含大括号。例如:
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
.
我认为不可能使用其他分隔符。您需要使用双花括号 {{
}}
表示不想被 format()
:
inp = """
DATABASE = {{
'name': '{DB_NAME}'
}}"""
dictionary = {'DB_NAME': 'abc'}
output = inp.format(**dictionary)
print(output)
输出
DATABASE = {
'name': 'abc'
}
将自定义占位符标记用于 python string.format()
上下文
- python 2.7
string.format()
- 允许自定义占位符语法的替代方法
问题
我们想将自定义占位符定界符与 python str.format()
一起使用string.format()
很强大,但是没有原生支持占位符分隔符修改。string.format()
使用非常常见的大括号并导致 Delimiter collisionstring.format()
默认解决方法是将分隔符加倍,这可能很麻烦。
解决方案
我们写了一个扩展原生的自定义 class python str.format()
- 使用自定义 class 扩展原生 python
- 配置
string.format()
以支持任意定界符占位符语法 - 允许其他增强功能,例如自定义格式化程序和过滤器
string.Formatter
Example001:演示使用自定义 ReFormat
class
- 我们编写了一个扩展 python
str.format()
的自定义
ReFormat
class
# 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)
陷阱
- 需要将 class 扩展到
str.format()
- 不能替代成熟的沙箱兼容模板解决方案