Je veux remplir une chaîne avec des espaces. Je sais que ce qui suit fonctionne pour les zéro:
>>> print "'%06d'"%4
'000004'
Mais que dois-je faire quand je veux ça?:
'hi '
bien sûr, je peux mesurer la longueur des cordes et le faire str+" "*leftover
, mais j'aimerais le plus court chemin.
python
string
string-formatting
pad
effiler
la source
la source
"%-6s" % s
pour aligné à gauche et"%6s" % s
pour aligné à droite.Réponses:
Vous pouvez le faire avec
str.ljust(width[, fillchar])
:la source
Pour une méthode flexible qui fonctionne même lors du formatage d'une chaîne compliquée, vous devez probablement utiliser le mini-langage de formatage de chaîne , en utilisant soit la
str.format()
méthodede f-cordes
la source
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
pour les modèles avec un seul{...}
et rien d'autre. Il suffit d' utiliser laformat()
fonction et vous épargner l'analyse des frais généraux:format('Hi', '<16')
.La nouvelle méthode de format de chaîne (ish) vous permet de faire des choses amusantes avec des arguments de mots clés imbriqués. Le cas le plus simple:
Si vous souhaitez passer en
16
tant que variable:Si vous souhaitez transmettre des variables pour l' ensemble du kit et kaboodle :
Ce qui se traduit par (vous l'avez deviné):
la source
Vous pouvez essayer ceci:
la source
"'%+100s'" % 'hi'
fonctionnerait pour mettre des espaces à droite de'hi'
La bonne façon de procéder serait d'utiliser la syntaxe de format de Python comme décrit dans la documentation officielle
Dans ce cas, il s'agirait simplement: des
'{:10}'.format('hi')
sorties:
'hi '
Explication:
À peu près tout ce que vous devez savoir est là ^.
Mise à jour: à partir de python 3.6, c'est encore plus pratique avec une interpolation de chaîne littérale!
la source
Utilisation
str.ljust()
:Vous devriez également considérer
string.zfill()
,str.ljust()
etstr.center()
pour le formatage des chaînes. Ceux-ci peuvent être enchaînés et avoir le caractère ' fill ' spécifié, ainsi:Ces opérations de formatage de chaînes ont l'avantage de fonctionner en Python v2 et v3.
Jetez un oeil à un moment
pydoc str
: il y a une multitude de bonnes choses là-dedans.la source
Depuis Python 3.6, vous pouvez simplement faire
avec interpolation de chaîne littérale .
Ou, si votre taille de rembourrage est dans une variable, comme ceci (merci @Matt M.!):
la source
f'{strng: >10}'
pour remplir la chaîne avec un espace de tête à une longueur de 10. C'est magique. Et ce n'est pas bien documenté.f'{strng:10}'
.vous pouvez également centrer votre chaîne:
la source
Utilisez le mini formatage de Python 2.7 pour les chaînes :
Cette gauche s'aligne et remplit à 8 caractères avec le caractère ''.
la source
Supprimez simplement le 0 et cela ajoutera de l'espace à la place:
la source
Ne serait-il pas plus pythonique d'utiliser le découpage?
Par exemple, pour remplir une chaîne avec des espaces à droite jusqu'à 10 caractères:
Pour le remplir avec des espaces sur la gauche jusqu'à 15 caractères:
Cela nécessite de savoir combien de temps vous voulez remplir, bien sûr, mais cela ne nécessite pas de mesurer la longueur de la chaîne avec laquelle vous commencez.
la source
''.join(reversed(str))
c'est plus pythonique questr[::-1]
, et nous savons tous que ce n'est pas vrai.(x + " " * 10)[:10]
est à mon avis beaucoup plus compliqué que l'utilisationx.ljust(10)
.Une bonne astuce à utiliser à la place des différents formats d'impression:
(1) Pad avec des espaces à droite:
(2) Pad avec des zéros à gauche sur la gauche:
la source
min_len = 8
alors('hi' + ' '*min_len)[:min_len]
ou('0'*min_len + str(2))[-min_len]
('0'*min_len + str(2))[-min_len:]
plutôt, même si ce n'est que pour le plaisir, et je recommande les autres réponses.Vous pourriez le faire en utilisant la compréhension de la liste, cela vous donnerait également une idée du nombre d'espaces et serait une ligne.
la source
s = "hi"
; à las + (6-len(s)) * " "
place (c'est ok quand le résultat est négatif) Cependant, les réponses qui utilisation quelle que soit fonction de cadre qui aborde la question exacte sera plus facile à maintenir (voir d' autres réponses)..