如何使用 textwrap 缩进第二行?

How to indent second line with textwrap?

我有这个 python 导入文本换行的代码。但是,我需要在前面只有一个数字的所有行前面放一个 space。

line1 = [" S  M  T  W Th  F  S"]
line2 = ["--------------------"]
line3 = [" 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31"]

print(''.join(line1))
print(''.join(line2))
line3Str = ''.join(line3)
wrapper = textwrap.TextWrapper(width=20) 
word_list = wrapper.wrap(text=line3Str) 
for element in word_list: 
  print(element)

我曾尝试在 7 和 8 之间放置不同的 space 或为第二行制作不同的列表,但无论我遇到什么问题。

预期输出:(连字符为 space)

-1 ...        
-8 ...     
15 ...       
22 ...     
29 ...

实际输出:

-1 ...       
8 ...   <         
15 ...         
22 ...        
29 ...

如果您希望字符串右对齐打印,您可以使用:

>>> '18'.rjust(2)
'18'
>>> '8'.rjust(2)
' 8'

除了最后一行之外,您希望每一行都右对齐,因此您可以将程序中的最后两行替换为:

for element in word_list[:-1]: 
    print(element.rjust(20))
print(word_list[-1])

或者,如果你想存储格式化后的字符串列表,你可以在调用wrapper.wrap后格式化word_list:

word_list = wrapper.wrap(text=line3Str)
word_list = [x.rjust(20) for x in word_list[:-1]] + [word_list[-1]]