web-dev-qa-db-de.com

Beste Weg, um eine Ganzzahl als Zeichenfolge mit führenden Nullen zu formatieren?

Ich muss der Ganzzahl führende Nullen hinzufügen, um eine Zeichenfolge mit einer definierten Anzahl von Ziffern ($ cnt) zu erstellen. Was ist der beste Weg, um diese einfache Funktion von PHP nach Python zu übersetzen:

function add_nulls($int, $cnt=2) {
    $int = intval($int);
    for($i=0; $i<($cnt-strlen($int)); $i++)
        $nulls .= '0';
    return $nulls.$int;
}

Gibt es eine Funktion, die das kann?

260
ramusus

Sie können die zfill() -Methode verwenden, um eine Zeichenfolge mit Nullen aufzufüllen:

In [3]: str(1).zfill(2)
Out[3]: '01'
543
unbeknown

Standardmäßig werden Format-String-Modifikatoren verwendet. Diese Format-String-Methoden stehen in den meisten Programmiersprachen zur Verfügung (z. B. über die Sprintf-Funktion in c) und sind ein nützliches Tool.

i = random.randint(0,99999)
print "%05d" % i

das wird eine Zeichenfolge der Länge 5 ausgeben.


Edit: In Python 2.6 und höher gibt es auch:

print '{0:05d}'.format(i)

Siehe: https://docs.python.org/2/library/string.html

150
user518450

Sie müssen höchstwahrscheinlich nur Ihre Ganzzahl formatieren:

'%0*d' % (fill, your_int)

Zum Beispiel,

>>> '%0*d' % (3, 4)
'004'
66
SilentGhost

Mit Python 3.6-F-Strings können wir leicht führende Nullen hinzufügen:

number = 5
print(f' now we have leading zeros in {number:02d}')

Schauen Sie sich diesen guten Beitrag über diese Funktion an.

44
SergioAraujo

Python 2.6 ermöglicht Folgendes:

add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count)

>>>add_nulls(2,3)
'002'
21
clorz

Für Python 3 und höher: str.zfill () ist immer noch die am besten lesbare Option

Aber es ist eine gute Idee, in das neue und leistungsstarke str.format () zu schauen. Was ist, wenn Sie etwas auffüllen möchten, das nicht 0 ist?

    # if we want to pad 22 with zeros in front, to be 5 digits in length:
    str_output = '{:0>5}'.format(22)
    print(str_output)
    # >>> 00022
    # {:0>5} meaning: ":0" means: pad with 0, ">" means move 22 to right most, "5" means the total length is 5

    # another example for comparision
    str_output = '{:#<4}'.format(11)
    print(str_output)
    # >>> 11##

    # to put it in a less hard-coded format:
    int_inputArg = 22
    int_desiredLength = 5
    str_output = '{str_0:0>{str_1}}'.format(str_0=int_inputArg, str_1=int_desiredLength)
    print(str_output)
    # >>> 00022
14
YunliuStorage

Sie haben mindestens zwei Möglichkeiten:

  • str.zfill: lambda n, cnt=2: str(n).zfill(cnt)
  • % Formatierung: lambda n, cnt=2: "%0*d" % (cnt, n)

Wenn auf Python> 2.5, siehe eine dritte Option in der Antwort von clorz.

5
tzot

Einzeilige Alternative zum eingebauten zfill.

Diese Funktion nimmt x und konvertiert es in einen String und fügt am Anfang nur Nullen hinzu, wenn die Länge zu kurz ist:

def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )

Um es zusammenzufassen - eingebaut: zfill ist gut genug, aber wenn jemand neugierig ist, wie man dies von Hand umsetzt, ist hier ein weiteres Beispiel.

Eine einfache Konvertierung wäre (wieder mit einer Funktion):

def add_nulls2(int, cnt):
    nulls = str(int)
    for i in range(cnt - len(str(int))):
        nulls = '0' + nulls
    return nulls
1
rpr