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?

Gish
la source

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

ambre
la source
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()))
Dan McDougall
la source
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!

goggin13
la source
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)
Yehonatan
la source
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.

Jonathan R
la source
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)]
Raja
la source
-1

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

str(num)
Ole
la source