Ich möchte eine Zeichenfolge mit Leerzeichen ausfüllen. Ich weiß, dass das Folgende für Nullen funktioniert:
>>> print "'%06d'"%4
'000004'
Aber was soll ich tun, wenn ich das will?:
'hi '
Natürlich kann ich die Saitenlänge messen und tun str+" "*leftover
, aber ich möchte den kürzesten Weg.
python
string
string-formatting
pad
Verjüngung
quelle
quelle
"%-6s" % s
für linksbündig und"%6s" % s
für rechtsbündig.Antworten:
Sie können dies tun mit
str.ljust(width[, fillchar])
:quelle
Für eine flexible Methode, die auch beim Formatieren komplizierter Zeichenfolgen funktioniert, sollten Sie wahrscheinlich die Minisprache zum Formatieren von Zeichenfolgen verwenden , wobei Sie entweder die
str.format()
Methode verwendenvon F-Saiten
quelle
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
für Vorlagen mit nur einer{...}
und nichts anderem verwenden. Verwenden Sie einfach dieformat()
Funktion und sparen Sie sich den Parsing-Aufwand :format('Hi', '<16')
.Mit der neuen (ish) String-Format-Methode können Sie lustige Dinge mit verschachtelten Schlüsselwortargumenten tun. Der einfachste Fall:
Wenn Sie
16
als Variable übergeben möchten :Wenn Sie Variablen für das gesamte Kit und Kaboodle übergeben möchten :
Was dazu führt (Sie haben es erraten):
quelle
Sie können dies versuchen:
quelle
"'%+100s'" % 'hi'
'hi'
Der richtige Weg, dies zu tun, wäre die Verwendung der Python-Formatsyntax, wie in der offiziellen Dokumentation beschrieben
In diesem Fall wäre es einfach:
'{:10}'.format('hi')
Welche Ausgänge:
'hi '
Erläuterung:
So ziemlich alles, was Sie wissen müssen, ist da ^.
Update: Ab Python 3.6 ist die wörtliche String-Interpolation noch praktischer!
quelle
Verwendung
str.ljust()
:Sie sollten auch berücksichtigen
string.zfill()
,str.ljust()
undstr.center()
für die Formatierung von Zeichenfolgen. Diese können verkettet werden und haben das angegebene ' Füll' -Zeichen, also:Diese Zeichenfolgenformatierungsvorgänge haben den Vorteil, dass sie in Python v2 und v3 funktionieren.
Schauen Sie sich mal an
pydoc str
: Es gibt eine Fülle guter Sachen.quelle
Ab Python 3.6 können Sie dies einfach tun
mit Literal-String-Interpolation .
Oder wenn Ihre Polstergröße in einer Variablen wie dieser liegt (danke @Matt M.!):
quelle
f'{strng: >10}'
zum Füllen eines Strings mit führenden Leerzeichen bis zu einer Länge von 10. Das ist Magie. Und es ist nicht gut dokumentiert.f'{strng:10}'
.Sie können auch zentrieren Ihre string:
quelle
Verwenden Sie die Mini-Formatierung von Python 2.7 für Zeichenfolgen :
Diese Linke wird ausgerichtet und mit dem Zeichen '' auf 8 Zeichen aufgefüllt.
quelle
Entfernen Sie einfach die 0 und es wird stattdessen Platz hinzugefügt:
quelle
Wäre es nicht pythonischer, Slicing zu verwenden?
So füllen Sie beispielsweise eine Zeichenfolge mit Leerzeichen auf der rechten Seite auf, bis sie 10 Zeichen lang ist:
So füllen Sie es mit Leerzeichen auf der linken Seite auf, bis es 15 Zeichen lang ist:
Natürlich müssen Sie wissen, wie lange Sie auffüllen möchten, aber Sie müssen nicht die Länge der Zeichenfolge messen, mit der Sie beginnen.
quelle
''.join(reversed(str))
es pythonischer ist alsstr[::-1]
, und wir alle wissen, dass das nicht stimmt.(x + " " * 10)[:10]
ist meiner Meinung nach viel komplizierter als die Verwendungx.ljust(10)
.Ein schöner Trick, der anstelle der verschiedenen Druckformate verwendet werden kann:
(1) Pad mit Leerzeichen rechts:
(2) Pad mit führenden Nullen links:
quelle
min_len = 8
dann('hi' + ' '*min_len)[:min_len]
oder('0'*min_len + str(2))[-min_len]
('0'*min_len + str(2))[-min_len:]
eher, obwohl dies nur zum Spaß ist, und ich empfehle die anderen Antworten.Sie könnten dies mit Listenverständnis tun. Dies würde Ihnen auch eine Vorstellung von der Anzahl der Leerzeichen geben und wäre ein Einzeiler.
quelle
s = "hi"
;s + (6-len(s)) * " "
stattdessen (es ist in Ordnung, wenn Das Ergebnis ist negativ. Antworten, die eine beliebige Framework-Funktion verwenden, die das genaue Problem behebt, sind jedoch einfacher zu pflegen (siehe andere Antworten).