Como coloco uma variável dentro de uma string?

246

Eu gostaria de colocar um intem um string. Isto é o que estou fazendo no momento:

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

Eu tenho que executar o programa para vários números diferentes, então eu gostaria de fazer um loop. Mas inserir a variável assim não funciona:

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

Como insiro uma variável em uma string Python?

Gish
fonte

Respostas:

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

O %operador, ao seguir uma sequência, permite inserir valores nessa sequência por meio de códigos de formato ( %dneste caso). Para mais detalhes, consulte a documentação do Python:

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

Âmbar
fonte
39
Observe que o %operador está obsoleto no Python 3.1. A nova maneira preferida é usar o .format()método discutido no PEP 3101 e mencionado na resposta de Dan McDougall.
22815 Chris Mueller
495

Oh, de muitas, muitas maneiras ...

Concatenação de cadeias:

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

Especificador de conversão:

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

Usando nomes de variáveis ​​locais:

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

Usando str.format():

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

Usando strings-f:

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

Usando string.Template:

plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))
Dan McDougall
fonte
16
Para usar o operador de string de formato com vários argumentos, pode-se usar uma tupla como operando: 'foo %d, bar %d' % (foo, bar).
Fiedl
12
Seu truque também funciona com a nova sintaxe de formato:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix 10/10
13
Com a introdução de f-strings no Python 3.6, isso agora pode ser escrito como plot.savefig(f'hanning{num}.pdf'). Eu adicionei uma resposta com esta informação.
Joelostblom 26/05
teve problemas ao usar locals () dentro de uma função que chamava de variável global; usado% globals () que funcionou
lobi 14/02
17

Não sabe exatamente o que todo o código que você postou faz, mas para responder à pergunta colocada no título, você pode usar + como a função normal concat de strings, bem como str ().

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

Espero que ajude!

goggin13
fonte
6
Embora esta resposta é cordas de construção corretas com +deve ser evitado como extremamente caro
slayton
6

Em geral, você pode criar strings usando:

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

Se você quiser colocar vários valores na string, poderá usar format

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

Resultaria na string hanning123.pdf. Isso pode ser feito com qualquer matriz.

Jonathan R
fonte
3

Eu precisava de uma versão estendida disso: em vez de incorporar um único número em uma string, eu precisava gerar uma série de nomes de arquivos no formato 'file1.pdf', 'file2.pdf' etc. etc. trabalhou:

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

Você só precisa converter o número variável em uma string usando

str(num)
Ole
fonte