Python >> Tutoriel Python >  >> Python

Python Comment ajouter des zéros à une chaîne ?

Avez-vous déjà eu une chaîne et voulu lui donner une certaine longueur en y ajoutant des zéros ? Vous pourriez le taper. Mais nous sommes des programmeurs, nous détestons taper ! Il doit sûrement y avoir un moyen de coder cela?

Pour ajouter des zéros à une chaîne, utilisez le str.zfill() méthode. Il prend un argument :la longueur finale de la chaîne que vous voulez et complète la chaîne avec des zéros à gauche.

>>> a = '12345'
>>> b = a.zfill(10)
# b is 10 characters long
>>> len(b)
10
>>> b
'0000012345'

Si vous entrez une valeur inférieure à la longueur de la chaîne, il renvoie la chaîne non modifiée.

>>> a = '12345'
>>> b = a.zfill(3)
# b is the same as a, as 3 < len(a)
>>> b
'12345'

Plongeons-nous dans un aperçu plus détaillé du remplissage de chaîne et les différentes options dont vous disposez.

Vidéo

Nous vous recommandons vivement de regarder la vidéo de cet article. Les idées peuvent être difficiles à comprendre au début. Avoir Adam pour vous guider rend les choses beaucoup plus faciles.

Méthodes de remplissage de chaîne Python

Python a plusieurs méthodes de chaîne intégrées pour remplir les chaînes. Vous n'êtes pas limité aux zéros, mais vous pouvez compléter avec n'importe quel caractère.

Leurs noms sont très faciles à retenir :

  • ljust — renvoie la chaîne gauche justifié 
  • rjust — renvoie la chaîne droite justifié
  • center — renvoie la chaîne centrée

Ils ont tous la même syntaxe

str.ljust(width, fillchar=' ')
str.rjust(width, fillchar=' ')
str.center(width, fillchar=' ')
  • Le premier argument est width . C'est la longueur de la chaîne vous voulez revenir. Si vous saisissez une largeur inférieure à len(str) , Python renvoie str non modifié.
  • Le deuxième argument, fillchar , est facultatif. Utilisez pour spécifier le caractère que vous souhaitez utiliser pour remplir votre chaîne. Par défaut, c'est un espace mais vous pouvez utiliser n'importe quoi. Si vous passez une chaîne de plus d'un caractère, Python lève un TypeError .

Voulez-vous développer les compétences d'un professionnel Python complet —tout en étant payé dans le processus ? Devenez freelance Python et commandez votre livre Leaving the Rat Race with Python sur Amazon (Kindle/Print ) !

Regardons quelques exemples pour chaque méthode.

Exemples str.ljust()

>>> a = 'hello'

# Width 10
>>> a.ljust(10)
'hello     '

# Width 40
>>> a.ljust(40)
'hello                                   '

# Width 10 padded with 0
>>> a.ljust(10, '0')
'hello00000'

# Width 40 padded with -
>>> a.ljust(40, '-')
'hello-----------------------------------'

# TypeError as fill character has len > 1
>>> a.ljust(10, '12')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: The fill character must be exactly one character long

Exemples str.rjust()

>>> a = 'hello'

# Width 10
>>> a.rjust(10)
'     hello'

# Width 40
>>> a.rjust(40)
'                                   hello'

# Width 10 padded with 0
>>> a.rjust(10, '0')
'00000hello'

# Width 40 padded with -
>>> a.rjust(40, '-')
'-----------------------------------hello'

# TypeError as fill character has len > 1
>>> a.rjust(10, '12')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: The fill character must be exactly one character long

Exemples str.center

Remarque :si le milieu de votre chaîne n'est pas exactement au milieu de la largeur, Python la justifiera légèrement à gauche. C'est le cas dans tous les exemples ci-dessous qui utilisent une largeur paire.

>>> a = 'hello'

# Width 10
>>> a.center(10)
'  hello   '

# Width 40
>>> a.center(40)
'                 hello     '

# Width 10 padded with 0
>>> a.center(10, '0')
'00hello000'

# Width 40 padded with -
>>> a.center(40, '-')
'-----------------hello------------------'

# TypeError as fill character has len > 1
>>> a.center(10, '12')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: The fill character must be exactly one character long

# Width 11 - perfectly centered, 3 x 0 on either side
>>> a.center(11, '0')
'000hello000'

Méthodes de format de remplissage de chaîne Python

Si vous utilisez le complexe print() instructions, vous voudrez utiliser des f-strings ou la méthode format à un moment donné. Heureusement, nous pouvons également facilement remplir les cordes de cette façon.

Les chaînes F ont été introduites dans Python 3.6. Ils sont la norme de facto pour le formatage des chaînes en Python. Mais nous inclurons le format() méthode d'exhaustivité.

Consultez la documentation Python officielle pour un aperçu détaillé. Attention, ils sont difficiles à comprendre. Ne vous découragez donc pas si cela vous prend du temps pour les comprendre.

Remplissage de chaîne Python à l'aide de chaînes F

Les cordes F sont incroyablement puissantes. Nous ne couvrirons que comment remplir les chaînes mais consultez cet article pour un aperçu détaillé.

Vous dénotez les f-strings en plaçant un f ou F devant une ficelle. Leur fonctionnalité clé est appelée un champ de remplacement . Il est noté par des accolades {} . À l'intérieur des accolades, vous pouvez mettre des variables, des expressions ou même des fonctions. Ceci est incroyablement utile car cela donne à vos cordes beaucoup de flexibilité.

Pour cet article, nous nous concentrerons sur l'appel de variables dans des chaînes, par exemple :

>>> name = 'John Cleese'
>>> print(f'I am called {name}')
I am called John Cleese

Vous pouvez modifier la chaîne à l'intérieur du champ de remplacement. Vous pouvez rembourrer, aligner et modifier sa longueur. C'est ce qu'on appelle la spécification du format en Python, ou format_spec pour faire court. Dans une f-string, vous spécifiez ceci en utilisant deux-points : . Tout ce qui suit les deux-points est une option de formatage. Il ne sera pas imprimé à l'écran. Examinons la syntaxe pour remplir, aligner et modifier la longueur d'une chaîne.

Nous tapons ce qui suit dans cet ordre, après deux-points :

  • remplir : caractère à utiliser pour le remplissage 
  • aligner : utilisez <,> ou ^ pour avoir un alignement à gauche, à droite ou au centre
  • largeur : valeur entière indiquant la longueur totale de la chaîne

Exemple :Donc, si nous voulons remplir notre chaîne avec des zéros, c'est-à-dire remplir 0, aligner à droite et avoir une largeur de 10, nous utiliserons

  • remplir : 0
  • aligner à droite :>
  • largeur : 10

Ce code montre cet exemple exact en action :

>>> a = 'hello'
>>> print(f'{a:0>10}')
00000hello

Voyons ce qui se passe lorsque nous modifions chacune de ces options. Tout d'abord, nous allons choisir un autre caractère de remplissage .

# Use hyphen fill character
>>> print(f'{a:->10}')
-----hello

# If we specify no fill character, space is used
>>> print(f'{a:>10}')
    hello

# Exclamation mark fill character
>>> print(f'{a:!>10}')
!!!!!hello

Nous allons maintenant modifier l'alignement . Le signe pointe dans le sens de l'alignement, c'est-à-dire < est aligné à gauche et vers le haut ^ est aligné au centre.

# Use hyphen fill character, left align
>>> print(f'{a:-<10}')
hello-----

# If we specify no fill character, space is used, left align
>>> print(f'{a:<10}')
hello

# Exclamation mark fill character, center align
>>> print(f'{a:!^10}')
!!hello!!!

Enfin, nous allons changer la chaîne longueur .

# Hyphen fill character, right align, length 40
>>> print(f'{a:->40}')
-----------------------------------hello

# If we specify no fill character, space is used, right align, length 25
>>> print(f'{a:>25}')
                    hello

# Exclamation mark fill character, center align, length 33
>>> print(f'{a:!^33}')
!!!!!!!!!!!!!!hello!!!!!!!!!!!!!!

Pour remplir plusieurs chaînes, utilisez plusieurs champs de remplacement (accolades {} ).

>>> a = 'hello'
>>> b = 'world!'

# a - pad with underscore, center align, length 11
# b - pad with 0, right align, length 10
>>> print(f'{a:_^11} some extra text {b:0>10}')
___hello___ some extra text 0000world!

Remplissage à l'aide de .format()

Remplissage avec format() est similaire aux f-strings.

a = 'hello'

# These are the same
# a - pad with hyphen, right align, length 40
print(f'{a:->40}')
print('{:->40}'.format(a))

# Output
-----------------------------------hello

Vous pouvez passer des chaînes directement à format si vous le souhaitez :

# These are the same
# a - pad with hyphen, right align, length 40
print('{:->40}'.format(a))
print('{:->40}'.format('hello'))

# Output
-----------------------------------hello

Le format_spec la syntaxe (tout après les deux-points) est la même lors de l'utilisation de f-strings ou de format. La différence est que vous passez a à format() plutôt que de le placer dans le champ de remplacement {} . Ou vous pouvez taper la chaîne directement dans format() .

Le rembourrage de plusieurs chaînes peut devenir plus complexe lors de l'utilisation de format() . Disons que vous avez deux champs de remplacement et passez deux variables à format(a, b) . Puis a ira au premier et b à la seconde.

a = 'hello'
b = 'world!'

# These are the same
# F-string
print(f'{a:_^11} some extra text {b:0>10}')

# Format
# a first, then b
print('{:_^11} some extra text {:0>10}'.format(a, b))

# Output
___hello___ some extra text 0000world!

Pour être plus explicite, vous pouvez vous référer aux arguments de format avec des index commençant à 0. Cela vous permet d'appeler des variables dans l'ordre que vous souhaitez.

# These are the same
print('{:_^11} some extra text {:0>10}'.format(a, b))

# a is index 0, b is index 1
print('{0:_^11} some extra text {1:0>10}'.format(a, b))
# ___hello___ some extra text 0000world!

# Call b from firt replacement field and a from the second.
print('{1:_^11} some extra text {0:0>10}'.format(a, b))
# __world!___ some extra text 00000hello

Enfin, vous n'avez pas besoin de spécifier de variables lorsque vous utilisez format . Vous pouvez transmettre les chaînes directement à la place.

# These are the same
print('{:_^11} some extra text {:0>10}'.format(a, b))
print('{:_^11} some extra text {:0>10}'.format('hello', 'world!'))
# ___hello___ some extra text 0000world!

Lequel devez-vous choisir ? Format ou F-Strings ?

Python a introduit les f-strings dans la PEP 498. L'une des raisons à cela est que format() la syntaxe peut être verbeuse, lente et difficile à lire. Les cordes F résolvent tous ces problèmes. Ils sont simples, très rapides et faciles à lire. Donc, vous devriez toujours les utiliser au lieu de format() . Pourtant, il est utile de connaître format() syntaxe au cas où vous la lisiez dans le code de quelqu'un d'autre.

Python Int en chaîne avec des zéros non significatifs

Pour convertir un entier i en une chaîne avec des zéros non significatifs de sorte qu'elle se compose de 5 caractères, utilisez la chaîne de format f'{i:05d}' . Le d flag dans cette expression définit que le résultat est une valeur décimale. Le str(i).zfill(5) accomplit la même conversion de chaîne d'un entier avec des zéros non significatifs.

Défi :Étant donné un nombre entier. Comment le convertir en chaîne en ajoutant des zéros non significatifs afin que la chaîne ait un nombre fixe de positions.

Exemple :Pour l'entier 42, vous voulez le remplir avec des zéros non significatifs jusqu'à la chaîne suivante de 5 caractères :'00042' .

Dans toutes les méthodes, nous supposons que l'entier a moins de 5 caractères.

Méthode 1 :formater la chaîne

La première méthode utilise la fonctionnalité de format de chaîne dans Python 3+. Ils sont également appelés champs de remplacement .

# Integer value to be converted
i = 42


# Method 1: Format String
s1 = f'{i:05d}'
print(s1)
# 00042

Le code f'{i:05d}' place l'entier i dans la chaîne nouvellement créée. Cependant, il indique au langage de format de remplir la chaîne à 5 caractères commençant par '0' s en utilisant le système décimal. C'est la manière la plus Pythonique d'accomplir ce défi.

Méthode 2 :zfill()

Une autre façon lisible et Pythonique de remplir la chaîne avec des 0 en tête est le string.zfill() méthode.

# Method 2: zfill()
s2 = str(i).zfill(5)
print(s2)
# 00042

La méthode prend un argument et c'est le nombre de positions de la chaîne résultante. Par défaut, il se remplit de 0.

Article connexe : Python Int en chaîne avec des zéros non significatifs

Résumé

Dans cet article, vous avez appris de nombreuses façons différentes de remplir des zéros (et tout autre caractère) dans des chaînes.

Si vous voulez juste remplir des zéros à gauche de la chaîne, il n'y a rien de mieux que le zfill() méthode. Il a été conçu pour résoudre ce problème.

Pour remplir différents caractères, utilisez ljust() , rjust() et center() . Ou vous pouvez utiliser des f-strings ou le format() méthode.

Les méthodes intégrées sont beaucoup plus faciles à apprendre, à lire et à mettre en œuvre. Mais il est important que vous les connaissiez tous. Vous verrez tout dans la nature !

Où aller à partir d'ici

Voulez-vous gagner plus d'argent ? Êtes-vous dans un emploi sans issue 9-5? Vous rêvez de vous libérer et de coder à temps plein, mais vous ne savez pas par où commencer ?

Devenir codeur à temps plein fait peur. Il y a tellement d'informations de codage là-bas que c'est écrasant.

La plupart des tutoriels vous enseignent Python et vous disent d'obtenir un emploi à temps plein.

D'accord, mais pourquoi voudriez-vous un autre travail de bureau ?

Vous n'avez pas soif de liberté ? Vous n'avez pas envie de parcourir le monde ? Vous ne voulez pas passer plus de temps avec vos amis et votre famille ?

Il n'y a pratiquement pas de tutoriels qui vous enseignent Python et comment être votre propre patron. Et il n'y en a aucun qui vous apprend à faire six chiffres par an.

Jusqu'ici.

Je suis un pigiste Python à temps plein. Je travaille 4 heures par jour de n'importe où dans le monde. Je fixe mon horaire et mon taux horaire. Mon calendrier est complet des mois à l'avance et j'ai un flux constant de nouveaux clients.

Cela semble trop beau pour être vrai, n'est-ce pas ?

Pas du tout. Je veux vous montrer les étapes exactes que j'ai utilisées pour arriver ici. Je veux te donner une vie de liberté. Je veux que tu sois un codeur à six chiffres.

Cliquez sur le lien ci-dessous pour regarder mon webinaire sur la valeur pure. Je vais vous montrer les étapes exactes pour vous emmener d'où vous êtes à un pigiste Python à temps plein. Ce sont des méthodes éprouvées, sans BS, qui vous permettent d'obtenir des résultats rapidement.

Peu importe que vous soyez un novice Python ou un pro Python. Si vous ne gagnez pas six chiffres par an avec Python en ce moment, vous apprendrez quelque chose de ce webinaire.

Ce webinaire ne sera pas en ligne pour toujours. Cliquez sur le lien ci-dessous avant que les places ne se remplissent et découvrez comment devenir un pigiste Python.

https://blog.finxter.com/webinar-freelancer/

Références

Les documents Python officiels pour le formatage des chaînes sont notoirement difficiles à comprendre. Heureusement, il existe de nombreuses ressources intéressantes en ligne. Découvrez nos favoris ci-dessous.

  1. https://www.python.org/dev/peps/pep-0498/
  2. https://realpython.com/python-f-strings/
  3. https://docs.python.org/3.8/library/string.html#formatexamples
  4. https://stackoverflow.com/questions/339007/how-to-pad-zeroes-to-a-string
  5. https://www.tutorialspoint.com/python/string_zfill.htm
  6. http://zetcode.com/python/fstring/
  7. https://pyformat.info/
  8. https://www.tutorialspoint.com/python/string_rjust.htm