Python: format string with custom delimiters [duplicate]
Solution 1:
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'
}
Solution 2:
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 collision -
string.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