How can I print a string using .format(), and print literal curly brackets around my replaced string

Simon Lundberg picture Simon Lundberg · Dec 1, 2011 · Viewed 17k times · Source

Possible Duplicate:
How can I print a literal “{}” characters in python string and also use .format on it?

Basically, I want to use .format(), like this:

my_string = '{{0}:{1}}'.format('hello', 'bonjour')

And have it match:

my_string = '{hello:bonjour}' #this is a string with literal curly brackets

However, the first piece of code gives me an error.

The curly brackets are important, because I'm using Python to communicate with a piece of software via text-based commands. I have no control over what kind of formatting the fosoftware expects, so it's crucial that I sort out all the formatting on my end. It uses curly brackets around strings to ensure that spaces in the strings are interpreted as single strings, rather than multiple arguments — much like you normally do with quotation marks in file paths, for example.

I'm currently using the older method:

my_string = '{%s:%s}' % ('hello', 'bonjour')

Which certainly works, but .format() seems easier to read, and when I'm sending commands with five or more variables all in one string, then readability becomes a significant issue.

Thanks!

Answer

Raymond Hettinger picture Raymond Hettinger · Dec 1, 2011

Here is the new style:

>>> '{{{0}:{1}}}'.format('hello', 'bonjour')
'{hello:bonjour}'

But I thinking escaping is somewhat hard to read, so I prefer to switch back to the older style to avoid escaping:

>>> '{%s:%s}' % ('hello', 'bonjour')
'{hello:bonjour}'