2010-06-02 9 views
126

Ich würde gerne eine int in eine string setzen. Dies ist, was ich im Moment tue:Wie lege ich eine Variable in einen String in Python?

end = smooth(data,window_len=40) 
plot.plot(time[0:len(end)],end) 
plot.savefig('hanning(40).pdf') #problem line 

Ich habe das Programm für verschiedene Zahlen anstelle der beiden 40er laufen. So würde Ich mag eine Schleife tun, aber Einsetzen der Variable wie dies funktioniert nicht:

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

Wie füge ich eine Variable in eine Python-String?

Antwort

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

Der % Operator, wenn eine Zeichenfolge folgen, können Sie die Werte in dieser Zeichenfolge über Formatcodes (die %d in diesem Fall) einzufügen. Weitere Einzelheiten finden Sie in der Python-Dokumentation:

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

+12

Beachten Sie, dass der '%' -Operator ab Python 3.1 veraltet ist. Der neue bevorzugte Weg ist die Verwendung der '.format()' Methode, wie in [PEP 3101] (https://www.python.org/dev/peps/pep-3101/) diskutiert und in Dan McDougalls Antwort erwähnt . –

10

nicht genau, was der ganze Code, den Sie geschrieben hat, aber die Frage im Titel gestellt zu beantworten, können Sie + als die normale Zeichenfolge Concat Funktion als auch als str().

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

Hoffe, dass hilft!

+1

@Gish: Wenn ich die anderen Beiträge sehe, muss ich Ambers Antwort als den korrekteren "pythonischen" Weg empfehlen, Zahlen in Strings einzufügen. Ich wusste nichts über den Operator%, aber ich würde auf diese Weise gehen. – goggin13

+0

Während diese Antwort korrekt ist, sollte der Aufbau von Strings mit '+' vermieden werden, da es extrem teuer ist. – slayton

4

In der Regel können Sie Strings erstellen:

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

Oh, die viele, viele Möglichkeiten ...

String-Verkettung:

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

Konvertierungsspezifizierer:

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

Usi ng lokale Variablennamen:

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

Mit Format():

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

Mit string.Template:

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

Um den Formatzeichenfolgenoperator mit mehreren Argumenten zu verwenden, kann man ein Tupel als Operanden verwenden: ''foo% d, bar% d'% (foo, bar) '. – fiedl

+9

Ihr ordentlicher Trick funktioniert auch mit der neuen Formatsyntax: 'plot.savefig ('hanning {num} s.pdf'.format (** einheimisch()))' – pix

+2

Mit der Einführung von f-Strings in Python 3.6 Dies kann jetzt als 'plot.savefig (f'hanning {num} .pdf ')' geschrieben werden. Ich habe eine Antwort mit dieser Information hinzugefügt. –

2

hatte ich eine Notwendigkeit für eine erweiterte Version dieses: anstelle der Einbettung eine einzelne Zahl in einem String, ich musste eine Reihe von Dateinamen in der Form 'Datei1.pdf', 'Datei2.pdf' usw. erzeugen. So funktionierte es:

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

Mit the introduction of formatted string literals ("f-strings" abgekürzt) in Python 3.6 ist es nun möglich ist, diese Syntax mit einem briefer zu schreiben:

>>> name = "Fred" 
>>> f"He said his name is {name}." 
'He said his name is Fred.' 

Mit dem Beispiel in der Frage gegeben, würde es aussehen gefällt das

plot.savefig(f'hanning{num}.pdf') 
+1

Es scheint, dass [f-Zeichenfolgen mit mehrzeiligen Zeichenfolgen kompatibel sind] (https://stackoverflow.com/a/47023489/3357935). –

Verwandte Themen