437 Stimmen

Beste Weg, um Integer als String mit führenden Nullen zu formatieren?

Ich muss führende Nullen an eine Ganzzahl anhängen, um eine Zeichenkette mit einer bestimmten Anzahl von Ziffern ($cnt) zu erstellen. Wie kann ich diese einfache Funktion am besten von PHP nach Python ü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, mit der dies möglich ist?

21voto

YunliuStorage Punkte 429

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

Aber es ist eine gute Idee, sich mit dem neuen und mächtigen str.format() zu befassen, denn was ist, wenn man etwas auffüllen will, 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

8voto

tzot Punkte 86792

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)

Bei Python >2.5, siehe die dritte Option in der Antwort von clorz.

4voto

Einzeiler-Alternative zum eingebauten zfill .

Diese Funktion nimmt x und wandelt sie in eine Zeichenkette um und fügt am Anfang nur dann Nullen hinzu, wenn die Länge zu gering ist:

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

Zusammenfassend kann man sagen, dass sie eingebaut sind: zfill ist gut genug, aber falls jemand neugierig ist, wie man das von Hand implementieren kann, hier ein weiteres Beispiel.

1voto

rpr Punkte 3520

Eine einfache Umrechnung 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

-3voto

Emre Köse Punkte 656

Dies ist meine Python-Funktion:

def add_nulls(num, cnt=2):
  cnt = cnt - len(str(num))
  nulls = '0' * cnt
  return '%s%s' % (nulls, num)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X