2012-05-16 10 views
35

Ich versuche Abstand hinzuzufügen zwischen zwei Strings Ausrichten von Text in Vars ohne „zu verwenden“, so zu tunPython Abstand und Ausrichten Saiten

Der Versuch, den Text zu erhalten wie folgt aussehen, wobei die zweite Spalte ausgerichtet sind.

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

Derzeit haben es so codiert, nur Räume mit ...

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

Ich habe versucht, mit string.rjust & srting.ljust arbeiten, aber ohne Erfolg.

Vorschläge?

+3

string.ljust sollte tun, was Sie wollen. Kannst du das, was du in der .ljust-Arena versucht hast, posten? – JoeFish

+1

Sie könnten immer '' \ t "' –

+0

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

Antwort

50

sollten Sie in der Lage sein, die Format-Methode zu verwenden:

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

Sie werden die von der Formatlänge für jede Zeile in Abhängigkeit von der Länge des Etiketts ausrechnen müssen. Die Benutzerzeile benötigt eine breitere Formatbreite als die Positions- oder Bezirkszeilen.

+7

Siehe http://docs.python.org/library/string.html#formatspec, um mit der Funktionsweise des Formatierungsbefehls zu helfen. –

30

Versuchen %*s und %-*s und jede Zeichenfolge mit der Spaltenbreite Präfix:

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

Ich wünschte, ich könnte Ihnen mehr Upvotes geben. Neat Lösung, wusste nicht über "*" Operator in String formatieren –

+0

Dies ist sehr nah an dem, was ich versuche zu tun. Es bleibt nur übrig, dass wenn der Distrikt zu "DOE" wird, die Spalten immer noch an der gleichen Stelle wie vorher sind. Gibt es eine Möglichkeit, immer einen bestimmten Abstand von etwa 20 Zeichen zu setzen, bevor die Spalte ausgerichtet wird, unabhängig von der Länge des Wertes in der ersten Spalte? –

+0

Ja, behandle es einfach wie eine andere Spalte: '"% -9s% -20s% -9s% -20s "% (" Ort: "," 10-10-10-10 "," Revision: "," 1 ") ' –

18

Sie können expandtabs verwenden, um die tabstop angeben, wie folgt aus:

>>> 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 das Format Methode Antwort ist die Weg zu gehen. Aber im Interesse Ihre Frage zu beantworten 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 

bearbeiten diese Methode zu beachten, ist es nicht erforderlich wissen, wie lange die Saiten sind. .format() kann auch, aber ich bin nicht vertraut genug, um es zu sagen.

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