Search code examples
pythonstring-formatting

Python: Capitalize a word using string.format()


Is it possible to capitalize a word using string formatting? For example,

"{user} did such and such.".format(user="foobar")

should return "Foobar did such and such."

Note that I'm well aware of .capitalize(); however, here's a (very simplified version of) code I'm using:

printme = random.choice(["On {date}, {user} did la-dee-dah. ",
                         "{user} did la-dee-dah on {date}. "
                         ])

output = printme.format(user=x,date=y)

As you can see, just defining user as x.capitalize() in the .format() doesn't work, since then it would also be applied (incorrectly) to the first scenario. And since I can't predict fate, there's no way of knowing which random.choice would be selected in advance. What can I do?

Addt'l note: Just doing output = random.choice(['xyz'.format(),'lmn'.format()]) (in other words, formatting each string individually, and then using .capitalize() for the ones that need it) isn't a viable option, since printme is actually choosing from ~40+ strings.


Solution

  • You can create your own subclass of string.Formatter which will allow you to recognize a custom conversion that you can use to recase your strings.

    myformatter.format('{user!u} did la-dee-dah on {date}, and {pronoun!l} liked it. ',
                          user=x, date=y, pronoun=z)