Ich möchte nur Textspalten mit fester Breite, aber die Zeichenfolgen sind alle rechts statt links aufgefüllt !!?
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
python
string-formatting
John Mee
quelle
quelle
Antworten:
Sie können der Größenanforderung linksbündig voranstellen
-
:sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry))
quelle
'%-*sText'%(3,'A')
Diese Version verwendet die Methode str.format .
Python 2.7 und neuer
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))
AKTUALISIEREN
Zuvor gab es in den Dokumenten eine Aussage darüber, dass der Operator% in Zukunft aus der Sprache entfernt wird. Diese Anweisung wurde aus den Dokumenten entfernt .
quelle
sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry))
Nebenbei können Sie die Breite mit variabel machen
*-s
>>> d = "%-*s%-*s"%(25,"apple",30,"something") >>> d 'apple something '
quelle
Ich bevorzuge die
format
Methode definitiv mehr, da sie sehr flexibel ist und leicht durch Definieren__format__
oder diestr
oderrepr
Darstellungen auf Ihre benutzerdefinierten Klassen erweitert werden kann . Um es einfach zu halten, verwende ichprint
in den folgenden Beispielen, die durch ersetzt werden könnensys.stdout.write
.#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 zu dem nächsten hinzufügen
align
gibt an, welche sind^
,<
und>
ein Füllzeichen den Raum von einem anderen Charakter ersetzenprint("{0:.^10}".format("Guido")) #..Guido...
print("{0:.<20} {1:.>20} {2:.^20} ".format("Product", "Price", "Sum")) #'Product............. ...............Price ........Sum.........'
Wenn Sie über benutzerdefinierte Klassen verfügen, können Sie diese
str
oderrepr
Darstellungen wie folgt definieren:class foo(object): def __str__(self): return "...::4::.." def __repr__(self): return "...::12::.."
Jetzt können Sie mit
!s
(str) oder!r
(repr) Python anweisen, diese definierten Methoden aufzurufen. Wenn nichts definiert ist, werden die Standardeinstellungen von Python ebenfalls__format__
überschrieben. x = foo ()print "{0!r:<10}".format(x) #'...::12::..' print "{0!s:<10}".format(x) #'...::4::..'
Quelle: Python Essential Reference, David M. Beazley, 4. Auflage
quelle
Mit den neuen und beliebten F-Strings in Python 3.6 können wir beispielsweise einen String mit 16 Polsterlängen linksbündig ausrichten:
string = "Stack Overflow" print(f"{string:<16}..") Stack Overflow ..
Wenn Sie eine variable Polsterlänge haben:
k = 20 print(f"{string:<{k}}..") Stack Overflow ..
F-Saiten sind kompakter.
quelle
str
ist in Python integriert, daher ist es nicht ideal, diesen als Objektnamen zu verwenden.>
,<
,^
usw., als eine Variable, so nacha="<"
, können Sie:f"{string:{a}{k}"
Verwenden Sie
-50%
anstelle von+50%
Sie werden nach links ausgerichtet.quelle
print "%-30s" % (name)
Zum Drucken des Namens mit linker Einrückung.Eine etwas besser lesbare alternative Lösung:
sys.stdout.write(code.ljust(5) + name.ljust(20) + industry)
Beachten Sie, dass
ljust(#ofchars)
Zeichen mit fester Breite verwendet werden und sich nicht wie bei den anderen Lösungen dynamisch anpassen.quelle
Dieser hat in meinem Python-Skript funktioniert:
print "\t%-5s %-10s %-10s %-10s %-10s %-10s %-20s" % (thread[0],thread[1],thread[2],thread[3],thread[4],thread[5],thread[6])
quelle