raw format string in string format method?

Peter Otten __peter__ at web.de
Thu Feb 28 16:41:54 CET 2013

Helmut Jarausch wrote:

> I'd like to print a string with the string format method which uses
> {0}, ...
> Unfortunately, the string contains TeX commands which use lots of
> braces. Therefore I would have to double all these braces just for the
> format method which makes the string hardly readable.
> Is there anything like a "raw" format string and any other means
> to circumvent this?
> Many thanks for a hint,
> Helmut.

While percent-formatting is probably the way to go here is a hack to replace 
the braces with custom characters:

import string

class SwapFormatter(string.Formatter):
    custom = "<>"
    braces = "{}"
    swap = {ord(p): q for p, q in zip(custom + braces, braces + custom)}

    def format(self, format_string, *args, **kw):
        format_string = format_string.translate(self.swap)
        return super().format(format_string, *args, **kw)

    def parse(self, format_string):
        return ((t[0].translate(self.swap),) + t[1:]
                for t in super().parse(format_string))

myformat = SwapFormatter().format
print(myformat("<< {} {{<0>}} <2> {<foo>} <1:<width>> >>",
               "alpha", 42, "gamma", foo="delta", width=5))

More information about the Python-list mailing list