web-dev-qa-db-fra.com

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

Je veux remplir une chaîne avec des espaces. Je sais que ce qui suit fonctionne pour les zéros:

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

Mais que dois-je faire quand je le souhaite ?:

'hi    '

bien sûr, je peux mesurer la longueur d'une chaîne et faire str+" "*leftover, mais j'aimerais le chemin le plus court.

397
taper

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

Renvoie la chaîne justifiée à gauche dans une chaîne de longueur largeur. Le rembourrage est effectué à l'aide du fillchar spécifié (un espace par défaut). La chaîne d'origine est renvoyée si width est inférieur à len(s).

>>> 'hi'.ljust(10)
'hi        '
565
Felix Kling

Sauf si vous devez prendre en charge Python 2.5, vous pouvez (et devriez probablement) utiliser le mini-langage de mise en forme string , comme suit:

'{0: <16}'.format('Hi')
297
simon

La nouvelle méthode (ish) string format 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 16 en tant que variable:

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

Si vous voulez passer des variables pour le kit whole et kaboodle :

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

Ce qui a pour résultat (vous l'avez deviné):

'Hi              '
83
CivFan

Vous pouvez essayer ceci:

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

Utilisez str.ljust() :

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

Vous devez également envisager string.zfill() _, str.ljust() et str.center() pour le formatage de chaîne. Ceux-ci peuvent être chaînés et avoir le caractère 'fill', ainsi:

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

Ces opérations de formatage de chaîne } _ ont l'avantage de fonctionner en Python v2 et v3.

Jetez un coup d'œil à pydoc str de temps en temps: vous y trouverez une profusion de bonnes choses.

35
Johnsyweb

vous pouvez aussi centrer votre chaîne:

'{0: ^20}'.format('Nice')
16
Remi

À partir de Python 3.6, vous pouvez simplement faire

>>> strng = 'hi'
>>> f'{strng: <10}'

avec interpolation de chaîne littérale .

Ou, si votre taille de remplissage est dans une variable, comme ceci (merci @ Matt M.!):

>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
14
WAF

Utilisez le formatage mini de Python 2.7 pour les chaînes :

'{0: <8}'.format('123')

Cette gauche est alignée et complétée à 8 caractères avec le caractère ''.

7
aodj

Supprimez simplement le 0 et cela ajoutera de l'espace:

>>> print  "'%6d'"%4
4
Amir Mofakhar

Ne serait-il pas plus pythonique d'utiliser le découpage en tranches?

Par exemple, pour remplir une chaîne avec des espaces à droite jusqu'à 10 caractères:

>>> x = "string"    
>>> (x + " " * 10)[:10]   
'string    '

Pour le remplir avec des espaces à gauche jusqu'à 15 caractères:

>>> (" " * 15 + x)[-15:]
'         string'

Cela nécessite bien sûr de savoir combien de temps vous voulez jouer, mais cela ne nécessite pas de mesurer la longueur de la chaîne par laquelle vous commencez.

3
Zev Chonoles

Vous pouvez le faire en utilisant la compréhension de liste, cela vous donnerait une idée du nombre d'espaces aussi et ce serait une ligne.

"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello                 '
1
foobar666

+ = peut être utilisé pour ajouter à la chaîne

>>> string = 'hi'
>>> for s in range(0,5):
...    string += ' '
... 
>>> string
'hi          '
0
SuperNova

Une astuce intéressante à utiliser à la place des différents formats d'impression:

(1) Pad avec des espaces à droite:

('hi' + '        ')[:8]

(2) Pavé avec zéros à gauche:

('0000' + str(2))[-4:]
0
Erik Anderson