Comment placer une variable dans une chaîne?


246

Je voudrais mettre un intdans un string. Voici ce que je fais en ce moment:

num = 40
plot.savefig('hanning40.pdf') #problem line

Je dois exécuter le programme pour plusieurs numéros différents, donc je voudrais faire une boucle. Mais l'insertion de la variable comme celle-ci ne fonctionne pas:

plot.savefig('hanning', num, '.pdf')

Comment insérer une variable dans une chaîne Python?

Réponses:


163
plot.savefig('hanning(%d).pdf' % num)

L' %opérateur, lorsqu'il suit une chaîne, vous permet d'insérer des valeurs dans cette chaîne via des codes de format (le %ddans ce cas). Pour plus de détails, consultez la documentation Python:

https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting


40
Notez que l' %opérateur est obsolète à partir de Python 3.1. La nouvelle façon préférée est d'utiliser la .format()méthode décrite dans le PEP 3101 et mentionnée dans la réponse de Dan McDougall.
Chris Mueller

499

Oh, les nombreuses façons ...

Concaténation de chaînes:

plot.savefig('hanning' + str(num) + '.pdf')

Spécificateur de conversion:

plot.savefig('hanning%s.pdf' % num)

Utilisation de noms de variables locales:

plot.savefig('hanning%(num)s.pdf' % locals()) # Neat trick

En utilisant str.format():

plot.savefig('hanning{0}.pdf'.format(num)) # Note: This is the new preferred way

Utilisation de chaînes f:

plot.savefig(f'hanning{num}.pdf') # added in Python 3.6

En utilisant string.Template:

plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))

16
Pour utiliser l'opérateur de chaîne de format avec plusieurs arguments, on peut utiliser un tuple comme opérande: 'foo %d, bar %d' % (foo, bar).
fiedl

12
Votre astuce fonctionne également avec la nouvelle syntaxe de format:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix

13
Avec l'introduction des chaînes f dans Python 3.6, cela peut maintenant être écrit comme plot.savefig(f'hanning{num}.pdf'). J'ai ajouté une réponse avec cette info.
joelostblom

eu des problèmes avec locals () dans une fonction appelant une variable globale; utilisé% globals () à la place, ce qui a fonctionné
lobi


17

Vous ne savez pas exactement ce que fait tout le code que vous avez publié, mais pour répondre à la question posée dans le titre, vous pouvez utiliser + comme fonction de concaténation de chaîne normale ainsi que str ().

"hello " + str(10) + " world" = "hello 10 world"

J'espère que cela pourra aider!


6
Bien que cette réponse soit correcte, les chaînes de construction +doivent être évitées car elles sont extrêmement coûteuses
slayton

6

En général, vous pouvez créer des chaînes en utilisant:

stringExample = "someString " + str(someNumber)
print(stringExample)
plot.savefig(stringExample)

4

Si vous souhaitez mettre plusieurs valeurs dans la chaîne, vous pouvez utiliser format

nums = [1,2,3]
plot.savefig('hanning{0}{1}{2}.pdf'.format(*nums))

Entraînerait la chaîne hanning123.pdf. Cela peut être fait avec n'importe quel tableau.


3

J'avais besoin d'une version étendue de ceci: au lieu d'incorporer un seul numéro dans une chaîne, j'avais besoin de générer une série de noms de fichiers de la forme 'file1.pdf', 'file2.pdf' etc. travaillé:

['file' + str(i) + '.pdf' for i in range(1,4)]

-1

Il vous suffit de transtyper la variable num en une chaîne en utilisant

str(num)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.