Печать с отступом в python

есть ли способ напечатать следующее,

print user + ":tt" + message

Так что длинные сообщения, которые шире, чем длина терминала всегда обертывания (начинается с той же позиции) ? так, например, это

Username:              LEFTLEFTLEFTLEFTLEFTLEFTLEFT
RIGHTRIGHTRIGHT

должны стать

Username:              LEFTLEFTLEFTLEFTLEFTLEFTLEFT
                       RIGHTRIGHTRIGHT

2 ответов


Я думаю, что вы ищете здесь 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

если вы действительно хотите использовать вкладки в отступе, это немного сложнее, потому что вам нужно сначала tab-развернуть 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)

если вы делаете это неоднократно, вы, вероятно, захотите обернуть этот беспорядок в функцию.


можно использовать str.ljust() чтобы заполнить каждую строку до требуемой ширины, например:

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

аргумент ljust - это длина, которую вы хотите, чтобы строка была, пока она состоит, строки должны правильно выстраиваться.

в качестве альтернативы вы можете использовать умножение строк на строках, где вам просто нужно заполнение, например:

print " "*line_width + "RIGHT"*3

это будет иметь тот же самый результат, что и последняя строка в приведенном выше код.