33

有没有办法打印以下内容,

print user + ":\t\t" + message

所以比终端长度更宽的冗长消息总是换行(从同一位置开始)?所以例如这个

Username:              LEFTLEFTLEFTLEFTLEFTLEFTLEFT
RIGHTRIGHTRIGHT

应该成为

Username:              LEFTLEFTLEFTLEFTLEFTLEFTLEFT
                       RIGHTRIGHTRIGHT
4

3 回答 3

34

我认为您在这里寻找的是textwrap模块:

user = "Username"
prefix = user + ": "
preferredWidth = 70
wrapper = textwrap.TextWrapper(initial_indent=prefix, width=preferredWidth,
                               subsequent_indent=' '*len(prefix))
message = "LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT " * 3
print wrapper.fill(message)

这打印:

Username: LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
          LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
          LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT

如果你真的想在缩进中使用制表符,那就有点棘手了,因为你必须先制表符展开initial_indent才能找出正确subsequent_indent的使用方法。而且,因为您的前缀实际上以两个制表符结尾,所以它更加复杂。这是我想出的最简单的:

user = "Username"
prefix = user + ":\t\t"
expanded_indent = textwrap.fill(prefix+'$', replace_whitespace=False)[:-1]
subsequent_indent = ' ' * len(expanded_indent)
wrapper = textwrap.TextWrapper(initial_indent=prefix,
                               subsequent_indent=subsequent_indent)
message = "LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT " * 3
print wrapper.fill(message)

如果您重复执行此操作,您可能希望将这个混乱包装在一个函数中。

于 2013-09-12T06:22:35.293 回答
13

在 Python 2 中,我建议使用格式向左缩进,例如:

print '{:<30}{:<40}'.format('UserName:','Foo')
print '{:<30}{:<40}'.format('User:','FooBar')
print '{:<30}{:<40}'.format('','FooBar42')

将导致:

UserName:                     Foo                                     
User:                         FooBar                                  
                              FooBar42     

等等...

对于 Python 3,使用括号 :) 此外,使用f-strings可以更紧凑地编写相同的内容:

print (f"{'UserName:':<30}{'Foo':<40}")
print (f"{'User:':<30}{'FooBar':<40}")
print (f"{'':<30}{'FooBar42':<40}")

还将导致:

UserName:                     Foo                                     
User:                         FooBar                                  
                              FooBar42     
于 2019-03-05T14:26:09.153 回答
9

您可以使用str.ljust()将每行填充到所需的宽度,如下所示:

line_width = 20
print "Username:".ljust(line_width) + "LEFT"*6
print "".ljust(line_width) + "RIGHT"*3

您传递给的参数ljust是您希望字符串的长度,只要这是一致的,行应该正确排列。

或者,您可以在只需要填充的行上使用字符串乘法,如下所示:

print " "*line_width + "RIGHT"*3

这将具有与上述代码中的最后一行完全相同的输出。

于 2013-09-12T06:11:42.300 回答