问题
EDITED
I have to format a string with values from a dictionary but the string already contains curly brackets. E.g.:
raw_string = """
    DATABASE = {
        'name': '{DB_NAME}'
   }
"""
But, of course, raw_string.format(my_dictionary) results in KeyErro.
Is there a way to use different symbols to use with .format()?
This is not a duplicate of How can I print literal curly-brace characters in python string and also use .format on it? as I need to keep curly brackets just as they are and use a different delimiter for .format.
回答1:
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.Formatterwith 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 
ReFormatclass 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
 
回答2:
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'
}
    来源:https://stackoverflow.com/questions/35574349/python-format-string-with-custom-delimiters