我想左右对齐字符串的正确部分。我正在写一个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()
答案 0 :(得分:3)
查看Python的Format Specification Mini-Language和printf-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>
答案 1 :(得分:0)
你正确地提到了str.ljust
,所以这只是根据需要拆分字符串并将其应用于“左”部分的情况。 E.g:
>>> parts = "## ! Say a Text".split(" ", 2)
>>> " ".join(parts[:2]).ljust(20)+parts[2]
'## ! Say a Text'
显然,为了简单起见,在开始加入字符串之前执行此操作可能会更好。