Python间距和对齐字符串

Tri*_*ard 42 python string alignment

我试图添加间距来对齐两个字符串变量之间的文本,而不使用""这样做

尝试使文本看起来像这样,第二列对齐.

Location: 10-10-10-10       Revision: 1
District: Tower             Date: May 16, 2012
User: LOD                   Time: 10:15
Run Code Online (Sandbox Code Playgroud)

目前它有这样编码,只是使用空格...

"Location: " + Location + "               Revision: " + Revision + '\n'
Run Code Online (Sandbox Code Playgroud)

我尝试使用string.rjust和srting.ljust,但无济于事.

建议?

Iro*_*san 60

您应该能够使用格式方法:

"Location: {0:20} Revision {1}".format(Location,Revision)
Run Code Online (Sandbox Code Playgroud)

您必须根据标签的长度找出每行的格式长度.用户线将需要比位置或区域线更宽的格式宽度.

  • 请参阅http://docs.python.org/library/string.html#formatspec以帮助format命令的工作方式. (10认同)
  • 但这并不容易,因为程序员必须计算格式字符串中的字符数。 (3认同)

Cha*_*tie 41

尝试%*s%-*s和前缀每个字符串列宽:

>>> print "Location: %-*s  Revision: %s" % (20,"10-10-10-10","1")
Location: 10-10-10-10           Revision: 1
>>> print "District: %-*s  Date: %s" % (20,"Tower","May 16, 2012")
District: Tower                 Date: May 16, 2012
Run Code Online (Sandbox Code Playgroud)

  • 希望我能给你更多的赞成.整洁的解决方案,在字符串格式化中不知道"*"运算符 (4认同)
  • 但是如果你使用python 2.6或更高版本,请使用@IronMensan的格式方法. (4认同)

fra*_*xel 23

您可以使用它expandtabs来指定tabstop,如下所示:

>>> print ('Location:'+'10-10-10-10'+'\t'+ 'Revision: 1'.expandtabs(30))
>>> print ('District: Tower'+'\t'+ 'Date: May 16, 2012'.expandtabs(30))
#Output:
Location:10-10-10-10          Revision: 1
District: Tower               Date: May 16, 2012
Run Code Online (Sandbox Code Playgroud)


小智 13

从 Python 3.6 开始,我们有了更好的选择,f-strings!

>>> print(f"{'Location: ' + location:<25} Revision: {revision}")
>>> print(f"{'District: ' + district:<25} Date: {date}")
>>> print(f"{'User: ' + user:<25} Time: {time}")
Run Code Online (Sandbox Code Playgroud)

输出:

Location: 10-10-10-10     Revision: 1
District: Tower           Date: May 16, 2012
User: LOD                 Time: 10:15
Run Code Online (Sandbox Code Playgroud)

由于大括号内的所有内容都是在运行时计算的,我们可以输入与变量 location 连接的字符串 'Location: '。使用 :<25 将整个连接的字符串放入一个 25 个字符长的框中,< 表示您希望它左对齐。这样,第二列总是在为第一列保留的 25 个字符之后开始。

另一个好处是您不必计算格式字符串中的字符数。使用 25 将适用于所有字符,前提是 25 的长度足以包含左列中的所有字符。

https://realpython.com/python-f-strings/解释了 f-strings 相对于以前的选项的好处。 https://medium.com/@NirantK/best-of-python3-6-f-strings-41f9154983e解释了如何使用 <、> 和 ^ 进行左对齐、右对齐和居中对齐。

  • IMO这是最好的答案。正是我所需要的! (2认同)

Joe*_*ish 10

@ IronMensan的格式方法答案是要走的路.但为了回答你关于ljust的问题:

>>> def printit():
...     print 'Location: 10-10-10-10'.ljust(40) + 'Revision: 1'
...     print 'District: Tower'.ljust(40) + 'Date: May 16, 2012'
...     print 'User: LOD'.ljust(40) + 'Time: 10:15'
...
>>> printit()
Location: 10-10-10-10                   Revision: 1
District: Tower                         Date: May 16, 2012
User: LOD                               Time: 10:15
Run Code Online (Sandbox Code Playgroud)

编辑注意此方法不需要您知道字符串的长度..format()也可能,但我不太熟悉它.

>>> uname='LOD'
>>> 'User: {}'.format(uname).ljust(40) + 'Time: 10:15'
'User: LOD                               Time: 10:15'
>>> uname='Tiddlywinks'
>>> 'User: {}'.format(uname).ljust(40) + 'Time: 10:15'
'User: Tiddlywinks                       Time: 10:15'
Run Code Online (Sandbox Code Playgroud)