Python: format string with custom delimiters
I don't think it is possible to use alternative delimiters. You need to use double-curly braces {{
}}
for curly braces that you don't want to be replaced by format()
:
inp = """
DATABASE = {{
'name': '{DB_NAME}'
}}"""
dictionary = {'DB_NAME': 'abc'}
output = inp.format(**dictionary)
print(output)
Output
DATABASE = {
'name': 'abc'
}
Using custom placeholder tokens with python string.format()
Context
- python 2.7
string.format()
- alternative approach that allows custom placeholder syntax
Problem
We want to use custom placeholder delimiters with python str.format()
string.format()
is powerful, but no native support for placeholder delimiter modification.string.format()
uses curly-brace which is very common and and causes Delimiter collisionstring.format()
default workaround is to double-up the delimiters, which can be cumbersome.
Solution
We write a custom class that extends native python str.format()
- extend native python
string.Formatter
with custom class - configure
string.format()
to support arbitrary delimiter placeholder syntax - permit other enhancements such as custom formatters and filters
Example001: Demo use of a custom ReFormat
class
- we wrote a custom
ReFormat
class that extends pythonstr.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)
Pitfalls
- requires extension class to
str.format()
- not intended as a substitute for full-blown sandbox-compatible templating solution