How to Left Justify part of a String in python?

sol picture sol · Dec 10, 2012 · Viewed 7.6k times · Source

I want to left justify the right part of a string. I am writing an IRC Bot's HELP command and I want the description to be left justified at the same width throughout:

List of commands:
## !          Say a Text
## execute    Execute an IRC command
## help       Help for commands

ljust works for a whole string, but how do I do this on a part of a string only?

This is my current code for generating the string:

format.color( "## ", format.LIME_GREEN ) + self.commands[ cmd ][1].__doc__.format( format.bold( cmd ) ).splitlines()[0].strip()

Answer

ank picture ank · Dec 10, 2012

Have a look at Python's Format Specification Mini-Language and printf-style String Formatting.

EXAMPLE:

>>> '{:<20} {}'.format('## execute', 'Execute an IRC command')
'## execute           Execute an IRC command'

Note that format() was introduced in Python 3.0 and backported to Python 2.6, so if you are using an older version, the same result can be achieved by:

>>> '%-20s %s' % ('## execute', 'Execute an IRC command')
'## execute           Execute an IRC command'

It's necessary to split the strings in a sensible manner beforehand.

EXAMPLE:

>>> '{:<20} {}'.format(*'{0} <COMMAND>: Help for <command>'.split(': '))
'{0} <COMMAND>        Help for <command>'

>>> '%-20s %s' % tuple('{0} <COMMAND>: Help for <command>'.split(': '))
'{0} <COMMAND>        Help for <command>