Frage Netteste Weise, Nullen auf eine Schnur aufzufüllen


Was ist die pythonischste Art, eine numerische Zeichenkette mit Nullen nach links aufzufüllen, d. H., So dass die numerische Zeichenkette eine bestimmte Länge hat?


997
2017-12-03 22:39


Ursprung


Antworten:


Saiten:

>>> n = '4'
>>> print n.zfill(3)
004

Und für Zahlen:

>>> n = 4
>>> print '%03d' % n
004
>>> print format(n, '03') # python >= 2.6
004
>>> print '{0:03d}'.format(n)  # python >= 2.6
004
>>> print '{foo:03d}'.format(foo=n)  # python >= 2.6
004
>>> print('{:03d}'.format(n))  # python >= 2.7 + python3
004
>>> print('{0:03d}'.format(n))  # python 3
004
>>> print(f'{n:03}') # python >= 3.6
004

Dokumentation zur String-Formatierung.


1588
2017-12-03 22:42



Benutze einfach die rjust Methode des String-Objekts.

In diesem Beispiel wird eine Zeichenfolge aus 10 Zeichen erstellt, die bei Bedarf gepolstert wird.

>>> t = 'test'
>>> t.rjust(10, '0')
>>> '000000test'

274
2017-12-03 22:47



Für Zahlen:

print "%05d" % number

Siehe auch: Python: String-Formatierung.

BEARBEITEN: Es ist erwähnenswert, dass ab gestern 3. Dezember 2008, diese Formatierungsmethode ist zugunsten der format String-Methode:

print("{0:05d}".format(number)) # or
print(format(number, "05d"))

Sehen PEP 3101 für Details.


85
2017-12-03 22:41



>>> '99'.zfill(5)
'00099'
>>> '99'.rjust(5,'0')
'00099'

wenn Sie das Gegenteil wollen:

>>> '99'.ljust(5,'0')
'99000'

43
2018-01-10 23:19



Funktioniert sowohl in Python 2 als auch in Python 3:

>>> "{:0>2}".format("1")  # Works for both numbers and strings.
'01'
>>> "{:02}".format(1)  # Only works for numbers.
'01'

41
2018-06-24 12:31



str(n).zfill(width) wird mit arbeiten strings, ints, floats ... und ist Python 2.x und 3.x kompatibel:

>>> n = 3
>>> str(n).zfill(5)
'00003'
>>> n = '3'
>>> str(n).zfill(5)
'00003'
>>> n = '3.0'
>>> str(n).zfill(5)
'003.0'

32
2018-06-01 04:40



Für diejenigen, die hierher gekommen sind, um zu verstehen und nicht nur eine schnelle Antwort. Ich mache diese speziell für Zeitstrings:

hour = 4
minute = 3
"{:0>2}:{:0>2}".format(hour,minute)
# prints 04:03

"{:0>3}:{:0>5}".format(hour,minute)
# prints '004:00003'

"{:0<3}:{:0<5}".format(hour,minute)
# prints '400:30000'

"{:$<3}:{:#<5}".format(hour,minute)
# prints '4$$:3####'

"0" -Symbole, was durch die "2" Füllzeichen zu ersetzen ist, ist der Standardwert ein leerer Platz

">" - Symbole weisen alle 2 Zeichen "0" links von der Zeichenfolge zu

":" Symbole die format_spec


15
2017-07-13 13:59



width = 10
x = 5
print "%0*d" % (width, x)
> 0000000005

In der Druckdokumentation finden Sie alle aufregenden Details!

Update für Python 3.x (7.5 Jahre später)

Diese letzte Zeile sollte jetzt sein:

print("%0*d" % (width, x))

I.e. print() ist jetzt eine Funktion, keine Aussage. Beachten Sie, dass ich immer noch die Old School bevorzuge printf() Stil weil, IMNSHO, liest es besser, und weil, ähm, habe ich diese Notation seit Januar 1980. Etwas verwendet ... alte Hunde .. etwas etwas ... neue Tricks.


14
2017-12-03 22:44