¿Cómo pongo una variable dentro de una cadena?

246

Me gustaría poner un inten a string. Esto es lo que estoy haciendo en este momento:

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

Tengo que ejecutar el programa para varios números diferentes, así que me gustaría hacer un ciclo. Pero insertar la variable de esta manera no funciona:

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

¿Cómo inserto una variable en una cadena de Python?

Gish
fuente

Respuestas:

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

El %operador, cuando sigue una cadena, le permite insertar valores en esa cadena a través de códigos de formato (el %den este caso). Para más detalles, consulte la documentación de Python:

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

Ámbar
fuente
39
Tenga en cuenta que el %operador está en desuso a partir de Python 3.1. La nueva forma preferida es hacer uso del .format()método como se discutió en PEP 3101 y se menciona en la respuesta de Dan McDougall.
Chris Mueller
497

Oh, las muchas, muchas formas ...

Concatenación de cadenas:

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

Especificador de conversión:

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

Usando nombres de variables locales:

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

Utilizando str.format():

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

Usando cadenas f:

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

Utilizando string.Template:

plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))
Dan McDougall
fuente
16
Para utilizar el operador de cadena de formato con múltiples argumentos, se puede usar una tupla como operando: 'foo %d, bar %d' % (foo, bar).
fiedl
12
Su buen truco también funciona con la nueva sintaxis de formato:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix
13
Con la introducción de f-strings en Python 3.6, ahora se puede escribir como plot.savefig(f'hanning{num}.pdf'). Agregué una respuesta con esta información.
joelostblom
tuvo problemas al usar locales () dentro de una función que llama a una variable global; usó% globals () en su lugar que funcionó
lobi
17

No estoy seguro de qué hace exactamente todo el código que publicó, pero para responder a la pregunta planteada en el título, puede usar + como la función normal de cadena de caracteres, así como str ().

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

¡Espero que ayude!

goggin13
fuente
66
Mientras que esta respuesta es la construcción de cadenas correctas con +debe evitarse ya que su extremadamente caro
slayton
6

En general, puede crear cadenas usando:

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

Si desea poner varios valores en la cadena, puede utilizar format

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

Resultaría en la cadena hanning123.pdf. Esto se puede hacer con cualquier matriz.

Jonathan R
fuente
3

Necesitaba una versión extendida de esto: en lugar de incrustar un solo número en una cadena, necesitaba generar una serie de nombres de archivo con el formato 'file1.pdf', 'file2.pdf', etc. Así es como funciona. trabajó:

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

Solo tiene que convertir el número variable en una cadena usando

str(num)
Viejo
fuente