2012-05-16 465 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'