web-dev-qa-db-fra.com

Formatage de chaîne en Python

Je veux faire quelque chose comme String.Format("[{0}, {1}, {2}]", 1, 2, 3) qui retourne:

[1, 2, 3]

Comment faire cela en Python?

29
Joan Venge

Les réponses précédentes utilisaient le formatage%, qui est éliminé progressivement dans Python 3.0+. En supposant que vous utilisiez Python 2.6+, un système de formatage plus évolutif est décrit ici:

http://docs.python.org/library/string.html#formatstrings

Bien qu'il existe également des fonctionnalités plus avancées, la forme la plus simple finit par ressembler beaucoup à ce que vous avez écrit:

>>> "[{0}, {1}, {2}]".format(1, 2, 3)
[1, 2, 3]
59
DNS

Vous pouvez le faire de trois manières:


Utilisez la jolie impression automatique de Python:

print [1, 2, 3]   # Prints [1, 2, 3]

Afficher la même chose avec une variable:

numberList = [1, 2]
numberList.append(3)
print numberList   # Prints [1, 2, 3]

Utilisez des substitutions de chaîne 'classiques' (le printf de ala C). Notez les différentes significations ici de% en tant que spécificateur de format de chaîne et de% pour appliquer la liste (en fait un tuple) à la chaîne de mise en forme. (Notez que le% est utilisé comme opérateur modulo (reste) pour les expressions arithmétiques.)

print "[%i, %i, %i]" % (1, 2, 3)

Notez que si nous utilisons notre variable prédéfinie, nous devrons la transformer en un tuple pour le faire:

print "[%i, %i, %i]" % Tuple(numberList)

Utilisez le formatage de chaîne Python 3. Ceci est toujours disponible dans les versions précédentes (à partir de la version 2.6), mais c'est la "nouvelle" façon de procéder dans Py 3. Notez que vous pouvez utiliser des arguments de position (ordinaux) ou des arguments nommés les dans l'ordre inverse. 

print "[{0}, {1}, {2}]".format(1, 2, 3)

Notez que les noms "un", "deux" et "trois" peuvent être ce qui a du sens.)

print "[{one}, {two}, {three}]".format(three=3, two=2, one=1)
27
Peter

Vous recherchez une mise en forme de chaîne, qui en python est basée sur la fonction sprintf en C.

print "[%s, %s, %s]" % (1, 2, 3)

Pour une référence complète, regardez ici: http://docs.python.org/library/stdtypes.html#string-formatting

18
chills42

Pour imprimer des éléments de manière séquentielle, utilisez {} sans spécifier l'index.

print('[{},{},{}]'.format(1,2,3))

(fonctionne depuis python 2.7 et python 3.1)

5
Riccardo Galli

Vous ne vous êtes pas très bien formulé, mais je vais tenter de deviner que vous recherchez ceci

foo = "Hello"
bar = "world"
baz = 2
print "%s, %s number %d" % (foo, bar, baz)
2
JosefAssad

Tu as beaucoup de solutions :)

moyen simple (style C):

print("[%i, %i, %i]" %(1, 2, 3))

Utilisez str.format ()

print("[{0}, {1}, {2}]", 1, 2, 3)

Utilisez str.Template ()

s = Template('[$a, $b, $c]')
print(s.substitute(a = 1, b = 2, c = 3))

Vous pouvez lire PEP 3101 - Mise en forme avancée des chaînes

1
RaminNietzsche

Je pense que cette combinaison manque: P

"[{0}, {1}, {2}]".format(*[1, 2, 3])
1
radeklos

Le PEP 498 qui a atterri dans python 3.6 a ajouté une interpolation de chaîne littérale, qui est essentiellement une forme abrégée de format.

Vous pouvez maintenant faire:

f"[{1}, {2}, {3}]"

Les autres utilisations courantes que je trouve utiles sont:

pi = 3.141592653589793
today = datetime(year=2018, month=2, day=3)

num_2 = 2     # Drop assigned values in
num_3 = "3"   # Call repr(), or it's shortened form !r
padding = 5   # Control prefix padding
precision = 3 #   and precision for printing


f"""[{1},
     {num_2},
     {num_3!r},
     {pi:{padding}.{precision}},
     {today:%B %d, %Y}]"""

Ce qui produira:

"[1,\n     2,\n     '3',\n      3.14,\n     February 03, 2018]"
1
toofarsideways

Si vous ne savez pas combien d'articles sont dans la liste, cette approche est la plus universelle

>>> '[{0}]'.format(', '.join([str(i) for i in [1,2,3]]))

'[1, 2, 3]'

C'est beaucoup plus simple pour une liste de chaînes

>>> '[{0}]'.format(', '.join(['a','b','c']))
'[a, b, c]'
0
Yupa