2012-05-16 22 views
35

Próbuję dodać odstępy aby wyrównać tekst w między dwa ciągi vars bez użycia „”, aby zrobićPython dystansowe i dostosowanie ciągów

Próbuje tekst wygląda jak ten, z drugiej kolumny są wyrównane.

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

Obecnie są to zakodowane w ten sposób, tylko za pomocą spacji ...

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

Próbowałem pracować z string.rjust & srting.ljust ale bezskutecznie.

Sugestie?

+3

string.ljust powinien zrobić to, co chcesz. Czy możesz opublikować to, co wypróbowałeś na arenie .ljust? – JoeFish

+1

Zawsze można użyć '" \ t "' –

+0

Zobacz także http://stackoverflow.com/questions/1448820/variable-length-of-s-w-operator-in-python#1448834 –

Odpowiedz

50

powinien być w stanie korzystać z metody format:

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

Będziesz musiał dowiedzieć się od długości formatu dla każdej linii w zależności od długości etykiety. Linia użytkownika będzie wymagać szerszego formatu niż linie lokalizacji lub rejonu.

+7

Zobacz http://docs.python.org/library/string.html#formatspec, aby pomóc w działaniu polecenia formatowania. –

30

Spróbuj %*s i %-*s i poprzedzić każdy łańcuch o szerokości kolumny:

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

Żałuję, że nie mogę dać ci więcej przebojów. Czyste rozwiązanie, nie wiedział o operatorze "*" w łańcuchu formującym –

+0

To jest BARDZO bliskie temu, co próbuję zrobić. Pozostało tylko to, że jeśli Dystrykt zmieni się na "DOE", to kolumny będą nadal w tym samym miejscu co poprzednio. Czy istnieje sposób, aby zawsze ustawić określoną odległość, na przykład 20 znaków przed wyrównaniem kolumny, która jest niezależna od długości wartości w pierwszej kolumnie? –

+0

Tak, po prostu potraktuj to jak inną kolumnę: '"% -9s% -20s% -9s% -20s "% (" Lokalizacja: "," 10-10-10-10 "," Revision: "," 1 ") ' –

18

Można wykorzystać expandtabs określić tabstop, tak:

>>> 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 jest metoda Format odpowiedź jest droga iść. Ale w interesie odpowiadając na pytanie o 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 

Edit zauważyć tej metody nie wymaga, aby wiedzieć, jak długo twoje struny. .format() może również, ale nie jestem dostatecznie zaznajomiony z tym, by powiedzieć.

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