2012-10-02 6 views
45

Ich möchte nur Spalten mit fester Breite Text, aber die Saiten sind alle gepolstert rechts statt links !!?Wie wird eine Zeichenfolge mit fester Breite links ausgerichtet?

sys.stdout.write("%6s %50s %25s\n" % (code, name, industry)) 

produziert

BGA        BEGA CHEESE LIMITED Food Beverage & Tobacco 
BHP        BHP BILLITON LIMITED     Materials 
BGL        BIGAIR GROUP LIMITED Telecommunication Services 
BGG   BLACKGOLD INTERNATIONAL HOLDINGS LIMITED     Energy 

aber wir wollen

BGA BEGA CHEESE LIMITED        Food Beverage & Tobacco 
BHP BHP BILLITON LIMITED        Materials 
BGL BIGAIR GROUP LIMITED        Telecommunication Services 
BGG BLACKGOLD INTERNATIONAL HOLDINGS LIMITED   Energy 
+0

shweet! Danke ... es musste ziemlich einfach sein. umm jetzt mit 3 gleichzeitigen richtigen Antworten wer bekommt den grünen Tick? –

Antwort

89

ausgerichtet werden können Sie die Größe Anforderung mit - Präfix linksbündig:

sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry)) 
+0

Schöne Lösung. Dies ist die beste Lösung. – SuB

24
sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry)) 

auf einer Seite beachten können Sie die Breite variabel machen mit *-s

>>> d = "%-*s%-*s"%(25,"apple",30,"something") 
>>> d 
'apple     something      ' 
9

Verwenden -50% statt +50% werden Sie nach links ..

+0

ex: 'print '% -30s"% (name) ', um den Namen mit linker Einrückung zu drucken. – mrsrinivas

36

Diese Version verwendet die str.format Methode.

Python 2.7 und neuere

sys.stdout.write("{:<7}{:<51}{:<25}\n".format(code, name, industry)) 

Python 2.6 Version

sys.stdout.write("{0:<7}{1:<51}{2:<25}\n".format(code, name, industry)) 

UPDATE

Früher eine Erklärung in der Dokumentation über den Operator% werden entfernt es wurde aus der Sprache in die Zukunft. Diese Aussage wurde removed from the docs.

+5

Der alte Stil wird nicht mehr weiterentwickelt werden würde, glaube ich: http://bugs.python.org/issue14123 –

+0

Es sieht so aus, dass Problem wird abgelehnt. Phase: committed/rejected –

+0

Dieser Status wird _also_ verwendet, um "committed" anzugeben, was definitiv daran lag, dass die Änderungen an der Dokumentation vorgenommen wurden. Was "Old String Formatierung Operationen" war in der 3.2-Dokumentation ist jetzt [printf-Stil String Formatierung] (http://docs.python.org/py3k/library/stdtypes.html#printf-style-string-formatting) in 3,3 . Die _possible_ deprecation Warnung - es tatsächlich gesagt „_may_ weggehen“, es war nie endgültig - ist nun aus diesem Abschnitt als auch abwesend, mit einer Warnung ersetzt darüber „quirky“ zu sein. Es geht nicht weg. –

2

Eine leicht lesbare alternative Lösung:
sys.stdout.write(code.ljust(5)+name.ljust(20)+industry)

Beachten Sie, dass ljust(#ofchars) feste Breite Zeichen verwendet und dynamisch anpassen nicht wie die anderen Lösungen.

4

Dieser arbeitete in meinem Python-Skript:

print "\t%-5s %-10s %-10s %-10s %-10s %-10s %-20s" % (thread[0],thread[1],thread[2],thread[3],thread[4],thread[5],thread[6]) 
+0

Nicht sicher, was dies in Bezug auf Differenzierung von allem anderen hinzufügt. und was zum Teufel ist Thread-Array? – UpAndAdam

0

ich auf jeden Fall lieber die format Methode mehr, da es sehr flexibel ist und leicht durch die Definition __format__ oder die str oder repr Darstellungen auf Ihre benutzerdefinierten Klassen erweitert werden kann . Um es einfach zu halten, verwende ich print in den folgenden Beispielen, die durch sys.stdout.write ersetzt werden können.

einfache Beispiele: Ausrichtung/Füll

#Justify/ALign (left, mid, right) 
print("{0:<10}".format("Guido")) # 'Guido  ' 
print("{0:>10}".format("Guido")) # '  Guido' 
print("{0:^10}".format("Guido")) # ' Guido ' 

Wir können den align Spezifiziert nächsten hinzuzufügen, die ^, < und > ein Füllzeichen den Raum, der durch jedes andere Zeichen zu ersetzen

print("{0:.^10}".format("Guido")) #..Guido... 

Mehreingaben Beispiele: align und füllen viele Eingänge

print("{0:.<20} {1:.>20} {2:.^20} ".format("Product", "Price", "Sum")) 
#'Product............. ...............Price ........Sum.........' 

Erweiterte Beispiele

Wenn Sie Ihre benutzerdefinierten Klassen haben, können Sie definieren es str oder repr Darstellungen ist wie folgt :

class foo(object): 
    def __str__(self): 
     return "...::4::.." 

    def __repr__(self): 
     return "...::12::.." 

Jetzt können Sie !s (str) oder !r (repr) verwenden, um python anzuweisen, diese definierten Methoden aufzurufen. Wenn nichts definiert ist, wird Python standardmäßig auf __format__ gesetzt, was ebenfalls überschrieben werden kann. x = foo()

print "{0!r:<10}".format(x) #'...::12::..' 
print "{0!s:<10}".format(x) #'...::4::..' 

Quelle: Python Grundlegende Referenz, David M. Beazley, 4. Auflage

Verwandte Themen