706 votes

Comment puis-je remplir une chaîne Python avec des espaces ?

Je veux remplir une chaîne de caractères avec des espaces. Je sais que la méthode suivante fonctionne pour les zéros :

>>> print  "'%06d'"%4
'000004'

Mais qu'est-ce que je dois faire quand je veux ça? :

'hi    '

Bien sûr, je peux mesurer la longueur des cordes et faire str+" "*leftover mais j'aimerais le chemin le plus court.

3 votes

Je sais qu'elle pourrait être dépréciée à l'avenir, mais j'aime toujours cette bonne vieille méthode : "%-6s" % s pour un alignement à gauche et "%6s" % s pour un alignement à droite.

938voto

Felix Kling Points 247451

Vous pouvez le faire avec str.ljust(width[, fillchar]) :

Retourner la chaîne justifiée à gauche dans une chaîne de longueur largeur . Le remplissage est effectué à l'aide de l'option fillchar (par défaut, un espace). La chaîne originale est retournée si largeur est inférieur à len(s) .

'hi'.ljust(10) 'hi '

23 votes

La réponse de @simon est plus flexible et plus utile pour le formatage de chaînes de caractères plus complexes.

4 votes

Ou celle de @abbot si vous êtes coincé avec de vieilles versions de python.

1 votes

Ljust() est maintenant déprécié. Voir stackoverflow.com/questions/14776788/ pour connaître la manière correcte de procéder

549voto

simon Points 3630

Pour une méthode flexible qui fonctionne même lors du formatage d'une chaîne compliquée, vous devriez probablement utiliser la fonction mini-langue de formatage des chaînes de caractères ,

en utilisant soit Cordes en F

>>> f'{"Hi": <16} StackOverflow!'  # Python >= 3.6
'Hi               StackOverflow!'

ou le str.format() méthode

>>> '{0: <16} StackOverflow!'.format('Hi')  # Python >=2.6
'Hi               StackOverflow!'

24 votes

Et si vous avez '16' dans une variable ?

0 votes

J'ai compris ça aussi. J'aurais dû le poster. La documentation dit que cela devrait fonctionner pour Py2.6, mais mes résultats sont différents. Fonctionne dans Py2.7 cependant.

1 votes

J'ai eu des problèmes avec ce type de formatage lorsque j'utilisais des accents nationaux. On aurait voulu que "kra" et "krá" soient identiques, mais ce n'était pas le cas.

194voto

CivFan Points 38

Le nouveau (ou presque) méthode de formatage des chaînes vous permet de faire des choses amusantes avec des arguments de mots-clés imbriqués. Le cas le plus simple :

>>> '{message: <16}'.format(message='Hi')
'Hi             '

Si vous voulez passer dans 16 comme une variable :

>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi              '

Si vous voulez passer des variables pour le tout l'attirail :

'{message:{fill}{align}{width}}'.format(
   message='Hi',
   fill=' ',
   align='<',
   width=16,
)

Ce qui aboutit à (vous l'avez deviné) :

'Hi              '

Et pour tout cela, vous pouvez utiliser python 3.6+ f-strings :

message = 'Hi'
fill = ' '
align = '<'
width = 16
f'{message:{fill}{align}{width}}'

Et bien sûr, le résultat :

'Hi              '

0 votes

Comment gérer la variation du message ? msgs = ['hi', 'hello', 'ciao']

1 votes

@ak_slick Vous pouvez passer des variables au lieu de valeurs codées en dur dans la fonction format.

87voto

abbot Points 8093

Vous pouvez essayer ceci :

print "'%-100s'" % 'hi'

0 votes

Print "'%-6s'" % 'hi' en effet ! !!

8 votes

@simon en tant que personne coincée sur un système python2.5 cette réponse m'a aidé, pas une réponse inutile +1

18 votes

N'est plus déprécié dans la version 3.3+.

58voto

Johnsyweb Points 45395

Utilisez str.ljust() :

>>> 'Hi'.ljust(6)
'Hi    '

Vous devez également prendre en compte string.zfill() , str.ljust() y str.center() pour le formatage des chaînes de caractères. Ceux-ci peuvent être enchaînés et ont l'attribut ' remplir spécifié, donc :

>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
'        00000003   blindmice....        '

Ces opérations de formatage de chaînes de caractères ont l'avantage de travailler en Python v2 et v3.

Jetez un coup d'œil à pydoc str parfois : il y a une foule de bonnes choses là-dedans.

3 votes

Merci d'avoir signalé le str.center(n) méthode. C'est exactement ce que je cherchais et je ne connaissais même pas son existence. :D

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