Gish
me gustaria poner un int
en un 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 bucle. Pero insertar la variable de esta manera no funciona:
plot.savefig('hanning', num, '.pdf')
¿Cómo inserto una variable en una cadena de Python?
Consulte también ¿Cómo puedo concatenar objetos str e int? si intentaste usar +
para concatenar un número con una cadena (o entre cadenas, etc.) y recibió un mensaje de error.
Si está tratando de ensamblar una URL con datos variables, no haga use el formato de cadena ordinario, porque es propenso a errores y más difícil de lo necesario. Hay herramientas especializadas disponibles. Consulte Agregar parámetros a una URL determinada en Python.
Si está tratando de ensamblar una consulta SQL, no haga utilice el formato de cadena ordinario, porque es un importante riesgo de seguridad. Esta es la causa de la “inyección SQL” que cuesta a las empresas reales enormes cantidades de dinero cada año. Consulte, por ejemplo, Python: mejores prácticas y la forma más segura de conectarse a MySQL y ejecutar consultas para conocer las técnicas adecuadas.
dan mcdougall
Usando cuerdas f:
plot.savefig(f'hanning{num}.pdf')
Esto se agregó en 3.6 y es la nueva forma preferida.
Usando str.format()
:
plot.savefig('hanning{0}.pdf'.format(num))
Concatenación de cadenas:
plot.savefig('hanning' + str(num) + '.pdf')
plot.savefig('hanning%s.pdf' % num)
Usando nombres de variables locales (buen truco):
plot.savefig('hanning%(num)s.pdf' % locals())
Usando string.Template
:
plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))
Ver también:
-
Para usar el operador de cadena de formato con múltiples argumentos, se puede usar una tupla como operando:
'foo %d, bar %d' % (foo, bar)
.– campo
8 de agosto de 2014 a las 15:38
-
Tu ingenioso truco también funciona con la nueva sintaxis de formato:
plot.savefig('hanning{num}s.pdf'.format(**locals()))
– foto
10 oct 2014 a las 4:30
-
tenía problemas para usar locales () dentro de una función que llamaba a una variable global; usó % globals() en su lugar, que funcionó
– lobi
14 de febrero de 2020 a las 12:40
-
“Debería haber uno – y preferiblemente solo uno — forma obvia de hacerlo”.
– MAChitgarha
15 de agosto de 2021 a las 21:38
-
@MAChitgarha: ilusiones, pero no algo que pueda sostenerse para un idioma que ha evolucionado con el tiempo.
– martineau
7 de febrero a las 23:58
Con la introducción de literales de cadena con formato (“f-strings” para abreviar) en Python 3.6, ahora es posible escribir esto con una sintaxis más breve:
>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
Con el ejemplo dado en la pregunta, se vería así
plot.savefig(f'hanning{num}.pdf')
-
Parece que las cadenas f son compatibles con las cadenas multilínea.
– Stevoisiak
30/10/2017 a las 20:23
Ámbar
plot.savefig('hanning(%d).pdf' % num)
los %
operador, cuando sigue una cadena, le permite insertar valores en esa cadena a través de códigos de formato (el %d
en este caso). Para obtener más detalles, consulte la documentación de Python:
-
Tenga en cuenta que el
%
operador está en desuso a partir de Python 3.1. La nueva forma preferida es hacer uso de la.format()
método como se discutió en PEP 3101 y mencionado en la respuesta de Dan McDougall.– Chris Müller
16 de julio de 2015 a las 14:18
-
los
%
operator no está en desuso, simplemente no es la forma preferida ahora.– kaya3
13 de septiembre de 2021 a las 12:59
goggin13
Puedes usar +
como la función normal de concatenación de cadenas, así como str()
.
"hello " + str(10) + " world" == "hello 10 world"
Yehonatán
En general, puede crear cadenas usando:
stringExample = "someString " + str(someNumber)
print(stringExample)
plot.savefig(stringExample)
jonathan r
Si desea poner varios valores en la cadena, puede utilizar format
nums = [1,2,3]
plot.savefig('hanning{0}{1}{2}.pdf'.format(*nums))
Daría como resultado la cadena hanning123.pdf
. Esto se puede hacer con cualquier matriz.
Raja
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 de la forma ‘archivo1.pdf’, ‘archivo2.pdf’, etc. Así es como trabajó:
['file' + str(i) + '.pdf' for i in range(1,4)]
-
La comprensión de la lista no es relevante para la pregunta de OP, y la técnica de formato de cadena que está utilizando ya está cubierta en la respuesta principal y la respuesta de goggin13. No publique respuestas que respondan a una pregunta diferente o soluciones duplicadas. Consulte Cómo responder. En cualquier caso, no hay razón para usar manualmente
str()
; es mucho más fácil usar f-strings, por ejemplo:f'file{i}.pdf'
– wjandrea
24 de julio a las 18:39