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

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

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

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

Username:              LEFTLEFTLEFTLEFTLEFTLEFTLEFT
RIGHTRIGHTRIGHT

должен стать

Username:              LEFTLEFTLEFTLEFTLEFTLEFTLEFT
                       RIGHTRIGHTRIGHT

Ответ 1

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

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

Ответ 2

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

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

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

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

print " "*line_width + "RIGHT"*3

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