web-dev-qa-db-de.com

Wie kann ich eine Python-Zeichenfolge mit Leerzeichen füllen?

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.

397
taper

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        '
565
Felix Kling

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')
297
simon

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

Sie können dies versuchen:

print "'%-100s'" % 'hi'
71
abbot

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!
42
Granitosaurus

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.

35
Johnsyweb

sie können auch center Ihre Saite:

'{0: ^20}'.format('Nice')
16
Remi

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}}'
14
WAF

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.

7
aodj

Entferne einfach die 0 und füge Platz hinzu:

>>> print  "'%6d'"%4
4
Amir Mofakhar

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.

3
Zev Chonoles

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

+ = kann zum Anhängen an einen String verwendet werden

>>> string = 'hi'
>>> for s in range(0,5):
...    string += ' '
... 
>>> string
'hi          '
0
SuperNova

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:]
0
Erik Anderson