Printing with indentation in python

回眸只為那壹抹淺笑 提交于 2020-01-29 02:44:40

问题


is there a way to print the following,

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

so that lengthy messages that are wider than the length of the terminal always wraps (starts from the same position) ? so for example this

Username:              LEFTLEFTLEFTLEFTLEFTLEFTLEFT
RIGHTRIGHTRIGHT

should become

Username:              LEFTLEFTLEFTLEFTLEFTLEFTLEFT
                       RIGHTRIGHTRIGHT

回答1:


I think what you're looking for here is the textwrap module:

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)

This prints:

Username: LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
          LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
          LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT

If you actually want to use tabs in the indent, that's a little trickier, because you have to first tab-expand the initial_indent to figure out the correct subsequent_indent to use. And, because your prefix actually ends with two tabs, it's even more complicated. Here's the simplest I've come up with:

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)

If you do this repeatedly, you will probably want to wrap that mess up in a function.




回答2:


You can use str.ljust() to pad out each line to the required width like so:

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

The argument you pass to ljust is the length you wish the string to be, as long as this is consistant the lines should line up correctly.

Alternately, you can use string multiplication on lines where you just need the paddding like so:

print " "*line_width + "RIGHT"*3

This will have the exact same output as the last line in the above code.




回答3:


I suggest using format to indent left e.g.:

print 'Username: {:>40}'.format('Foo')
print '          {:>40}'.format('FooBar')

Will result to:

Username:                                      Foo
                                            FooBar

Also,

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

will result to:

UserName:                     Foo                                     
User:                         FooBar                                  
                              FooBar42     

And so on...



来源:https://stackoverflow.com/questions/18756510/printing-with-indentation-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!