2012-05-16 3 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 должен делать то, что вы хотите. Можете ли вы опубликовать то, что вы пробовали на арене. – 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, чтобы помочь с тем, как работает команда format. –

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

Жаль, что я мог бы дать вам больше очков. Аккуратное решение, не знал о «*» операторе в строковом формировании –

+0

Это ОЧЕНЬ близко к тому, что я пытаюсь сделать. Осталось только то, что если округ изменится на «DOE», столбцы все равно будут находиться в том же месте, что и раньше. Есть ли способ всегда задавать определенное расстояние, например, 20 символов перед выравниванием столбца, который не зависит от длины значения в первом столбце? –

+0

Да, просто рассматривайте его как другой столбец: «% -9s% -20s% -9s% -20s»% («Location:», «10-10-10-10», «Revision:», «1») ' –

18

Вы можете использовать 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 
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' 
Смежные вопросы