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 stringlänge messen und str+" "*leftover
machen, aber ich möchte den kürzesten weg.
Sie können dies mit str.ljust(width[, fillchar])
tun:
Geben Sie die Zeichenfolge linksbündig in einer Zeichenfolge der Länge Breite zurück. Das Auffüllen erfolgt mit dem angegebenen fillchar (Standard ist ein Leerzeichen). Die ursprüngliche Zeichenfolge wird zurückgegeben, wenn Breite kleiner als
len(s)
ist.
>>> 'hi'.ljust(10)
'hi '
Wenn Sie Python 2.5 nicht unterstützen müssen, können Sie (und sollten dies wahrscheinlich) die Minisprache string-formatatting verwenden.
'{0: <16}'.format('Hi')
Mit der neuen (ish) string-Formatmethode können Sie mit verschachtelten Schlüsselwortargumenten Spaß machen. Der einfachste Fall:
>>> '{message: <16}'.format(message='Hi')
'Hi '
Wenn Sie 16
als Variable übergeben wollen:
>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi '
Wenn Sie Variablen für das whole Kit und kaboodle übergeben möchten:
'{message:{fill}{align}{width}}'.format(
message='Hi',
fill=' ',
align='<',
width=16,
)
Welches führt zu (Sie haben es erraten):
'Hi '
Sie können dies versuchen:
print "'%-100s'" % 'hi'
Eine korrekte Methode hierfür ist die Verwendung der Python-Formatsyntax, wie in der offiziellen Dokumentation beschrieben
In diesem Fall wäre es einfach:'{:10}'.format('hi')
welche ausgibt:'hi '
Erläuterung:
format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= integer
precision ::= integer
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Es gibt so ziemlich alles, was du wissen musst.
Update: ab python 3.6 ist es mit der Literal String Interpolation noch komfortabler!
foo = 'foobar'
print(f'{foo:10} is great!')
# foobar is great!
Verwenden Sie str.ljust()
:
>>> 'Hi'.ljust(6)
'Hi '
Sie sollten auch string.zfill()
, str.ljust()
und str.center()
für die Formatierung von Zeichenfolgen berücksichtigen. Diese können verkettet werden und haben das Zeichen 'fill', also:
>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
' 00000003 blindmice.... '
Diese String-Formatierungsoperationen haben den Vorteil, dass sie in Python v2 und v3 arbeiten.
Werfen Sie einen Blick auf pydoc str
Irgendwann: Da gibt es eine Fülle guter Sachen.
sie können auch center Ihre Saite:
'{0: ^20}'.format('Nice')
Ab Python 3.6 können Sie dies einfach tun
>>> strng = 'hi'
>>> f'{strng: <10}'
mit literaler Zeichenketteninterpolation .
Oder, wenn Ihre Auffüllgröße in einer Variablen ist, wie hier (Danke @Matt M.!)
>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
Verwenden Sie die mini-Formatierung von Python 2.7 für Zeichenfolgen :
'{0: <8}'.format('123')
Mit diesem Link werden 8 Zeichen mit dem Zeichen '' ausgefüllt.
Entferne einfach die 0 und füge Platz hinzu:
>>> print "'%6d'"%4
Wäre es nicht mehr Pythonic, Slicing zu verwenden?
Wenn Sie beispielsweise eine Zeichenfolge mit Leerzeichen auf der rechten Seite auffüllen, bis sie 10 Zeichen lang ist:
>>> x = "string"
>>> (x + " " * 10)[:10]
'string '
Um es mit Leerzeichen auf der linken Seite aufzufüllen, bis es 15 Zeichen lang ist:
>>> (" " * 15 + x)[-15:]
' string'
Natürlich müssen Sie wissen, wie lange Sie anpads möchten, aber Sie müssen nicht die Länge der Saite messen, mit der Sie beginnen.
Sie können dies mit Hilfe des Listenverständnisses tun. Dies würde Ihnen auch eine Vorstellung von der Anzahl der Felder geben und wäre ein Einzeiler.
"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello '
+ = kann zum Anhängen an einen String verwendet werden
>>> string = 'hi'
>>> for s in range(0,5):
... string += ' '
...
>>> string
'hi '
Ein schöner Trick anstelle der verschiedenen Druckformate:
(1) Schreibe mit Leerzeichen nach rechts:
('hi' + ' ')[:8]
(2) Pad mit führenden Nullen auf der linken Seite:
('0000' + str(2))[-4:]