381 votes

La meilleure façon de formater un entier en tant que chaîne de caractères avec des zéros en tête ?

Je dois ajouter des zéros non significatifs à un nombre entier pour obtenir une chaîne de caractères avec un nombre défini de chiffres ($cnt). Quelle est la meilleure façon de traduire cette fonction simple de PHP à Python ?

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

Existe-t-il une fonction qui puisse faire cela ?

0 votes

Votre code produit un avis, btw

1 votes

php.net/printf est la voie à suivre en php

2 votes

@SilentGhost, ou str_pad

17voto

YunliuStorage Points 399

Pour Python 3 et au-delà : str.zfill() est toujours l'option la plus lisible

Mais c'est une bonne idée de se pencher sur le nouveau et puissant str.format(), que faire si l'on veut tamponner quelque chose qui n'est pas 0 ?

    # 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

7voto

tzot Points 32224

Vous avez au moins deux options :

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

Si sur Python >2.5, voir une troisième option dans la réponse de clorz.

2voto

Une alternative à l'intégré zfill .

Cette fonction prend x et le convertit en une chaîne de caractères, et ajoute des zéros au début uniquement et seulement si la longueur est trop courte :

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

En résumé, il s'agit de l'intégration : zfill est suffisant, mais si quelqu'un est curieux de savoir comment l'implémenter à la main, voici un autre exemple.

0voto

rpr Points 1029

Une conversion simple serait (toujours avec une fonction) :

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

-1voto

Rémy Bourgoin Points 859

Juste pour la culture, sur PHP, vous avez la fonction str_pad qui fait exactement le travail de votre fonction add_nulls .

str_pad($int, $cnt, '0', STR_PAD_LEFT);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X