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

748voto

Vous pouvez utiliser le zfill() pour remplir une chaîne de caractères avec des zéros :

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

219voto

user518450 Points 681

La méthode standard consiste à utiliser des modificateurs de chaîne de format. Ces méthodes de chaîne de format sont disponibles dans la plupart des langages de programmation (via la fonction sprintf en c par exemple) et constituent un outil pratique à connaître.

Pour sortir une chaîne de longueur 5 :

... en Python 3.5 et plus :

i = random.randint(0, 99999)
print(f'{i:05d}')

... Python 2.6 et plus :

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

... avant Python 2.6 :

print "%05d" % i

Voir : https://docs.python.org/3/library/string.html

0 votes

Et si vous ne connaissez pas le nombre de zéros avant l'exécution ? Disons la longueur d'une liste ?

3 votes

@Zelphir vous pouvez créer dynamiquement la chaîne de formatage, [('{{0:0{0:d}d}}').format(len(my_list)).format(k) for k in my_list]

0 votes

J'ai choisi de concaténer la chaîne de format à la place, en insérant la longueur d'une liste par exemple. Votre façon de procéder présente-t-elle des avantages ?

107voto

user2571881 Points 1787

Python 3.6 f-strings nous permet d'ajouter facilement des zéros de tête :

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

Jetez un coup d'œil à ce bon article à propos de cette fonctionnalité.

72voto

SilentGhost Points 79627

Vous avez probablement juste besoin de formater votre nombre entier :

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

Par exemple,

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

1 votes

La question est : comment ajouter une quantité non permanente de zéros ?

2 votes

Ce n'est pas permanent - en fait, vous ne pouvez pas ajouter des zéros de façon permanente à partir d'un int - qui serait alors interprété comme une valeur octale.

1 votes

@Matthew Schnickel : Je pense que l'OP veut connaître une méthode pour calculer le nombre de zéros dont il a besoin. Le formatage gère cela très bien. Et int(x, 10) gère les zéros de tête.

23voto

clorz Points 455

Python 2.6 le permet :

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

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

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