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.
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 '
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')
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 '
Vous pouvez essayer ceci:
print "'%-100s'" % 'hi'
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.
vous pouvez aussi centrer votre chaîne:
'{0: ^20}'.format('Nice')
À 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}}'
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 ''.
Supprimez simplement le 0 et cela ajoutera de l'espace:
>>> print "'%6d'"%4
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.
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 '
+ = peut être utilisé pour ajouter à la chaîne
>>> string = 'hi'
>>> for s in range(0,5):
... string += ' '
...
>>> string
'hi '
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:]