75 votes

Formater la chaîne dynamiquement

Si je veux rendre ma chaîne formatée ajustable dynamiquement, je peux modifier le code suivant de

 print '%20s : %20s' % ("Python", "Very Good")

à

 width = 20
print ('%' + str(width) + 's : %' + str(width) + 's') % ("Python", "Very Good")

Cependant, il semble que la concaténation de chaînes soit ici lourde. Une autre façon de simplifier les choses ?

129voto

user3100115 Points 15249

Vous pouvez le faire en utilisant la méthode str.format() .

 >>> width = 20
>>> print("{:>{width}} : {:>{width}}".format("Python", "Very Good", width=width))
              Python :            Very Good

À partir de Python 3.6, vous pouvez utiliser f-string pour faire ceci :

 In [579]: lang = 'Python'

In [580]: adj = 'Very Good'

In [581]: width = 20

In [582]: f'{lang:>{width}}: {adj:>{width}}'
Out[582]: '              Python:            Very Good'

43voto

Frédéric Hamidi Points 123646

Vous pouvez récupérer la valeur de remplissage à partir de la liste d'arguments :

 print '%*s : %*s' % (20, "Python", 20, "Very Good")

Vous pouvez même insérer dynamiquement les valeurs de remplissage :

 width = 20
args = ("Python", "Very Good")
padded_args = zip([width] * len(args), args)
# Flatten the padded argument list.
print "%*s : %*s" % tuple([item for list in padded_args for item in list])

35voto

Pour ceux qui veulent faire la même chose avec python 3.6+ et f-Strings, c'est la solution.

 width = 20
py, vg = "Python", "Very Good"
print(f"{py:>{width}s} : {vg:>{width}s}")

9voto

print '%*s : %*s' % (width, 'Python', width, 'Very Good')

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