سؤال

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()
هل كانت مفيدة؟

المحلول

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>

نصائح أخرى

You rightly mention str.ljust, so it's just a case of splitting your string as appropriate and applying it to the 'left' part. E.g:

>>> parts = "## ! Say a Text".split(" ", 2)
>>> " ".join(parts[:2]).ljust(20)+parts[2]
'## !                Say a Text'

Obviously, it may be better to do this before you start joining the string for simplicity.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top