3

我想左对齐字符串的右侧部分。我正在编写一个 IRC Bot 的 HELP 命令,我希望描述在整个过程中保持相同的宽度:

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

ljust适用于整个字符串,但我如何仅对字符串的一部分执行此操作?

这是我当前生成字符串的代码:

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

2 回答 2

3

看看 Python 的Format Specification Mini-Languageprintf-style String Formatting

例子:

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

请注意,它format()是在 Python 3.0 中引入并向后移植到 Python 2.6,因此如果您使用的是旧版本,则可以通过以下方式实现相同的结果:

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

有必要事先以合理的方式拆分字符串。

例子:

>>> '{:<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>
于 2012-12-10T21:09:18.513 回答
0

您正确地提到str.ljust了 ,所以这只是适当拆分字符串并将其应用于“左”部分的情况。例如:

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

显然,为简单起见,最好在开始加入字符串之前执行此操作。

于 2012-12-10T20:56:49.050 回答