2012-05-16 344 views
35

我尝试添加间距在串两者之间的文本对齐瓦尔不使用“”这样做Python的间距和对齐字符串

试图让文本看起来像这样,在第二列对齐。

Location: 10-10-10-10  Revision: 1 
District: Tower    Date: May 16, 2012 
User: LOD     Time: 10:15 

目前已将其编码这样的,只是用空格...

"Location: " + Location + "    Revision: " + Revision + '\n' 

我试着用string.rjust & srting.ljust但无济于事工作。

对此提出建议?

+3

string.ljust应该做你想做的。你可以发布你在.ljust舞台上试过的东西吗? – JoeFish

+1

你总是可以使用'“\ t”' –

+0

参见http://stackoverflow.com/questions/1448820/variable-length-of-s-with-the-operator-in-python#1448834 –

回答

50

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

"Location: {0:20} Revision {1}".format(Location,Revision) 

你必须弄清楚的格式长度为根据标签的长度,每行。用户行需要比地点或地区线更宽的格式宽度。

+7

参见http:/ /docs.python.org/library/string.html#formatspec以帮助格式化命令的工作方式。 –

30

尝试%*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 
+2

希望我能给你更多upvotes。整洁的解决方案,不知道字符串格式化中的“*”运算符 –

+0

这非常接近我想要做的。唯一剩下的将是,如果区改为“能源部”,列将仍然在以前的相同位置。有没有办法在列对齐之前总是设置一定的距离,例如20个字符,这与第一列中的值的长度无关? –

+0

是的只是把它当作另一列来处理:'“%-9s%-20s%-9s%-20s”%(“Location:”,“10-10-10-10”,“Revision:”,“1”) ' –

18

您可以使用expandtabs指定的制表位,如下所示:

>>> 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 
9

@ 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 

编辑注意到这个方法不需要你知道你的字符串有多长。 .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'