Wie füge ich eine Variable in einen String ein?

246

Ich würde gerne eine intin eine setzen string. Das mache ich gerade:

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

Ich muss das Programm für mehrere verschiedene Nummern ausführen, also möchte ich eine Schleife machen. Das Einfügen der Variablen wie folgt funktioniert jedoch nicht:

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

Wie füge ich eine Variable in eine Python-Zeichenfolge ein?

Gish
quelle

Antworten:

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

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

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

Bernstein
quelle
39
Beachten Sie, dass der %Operator ab Python 3.1 veraltet ist. Der neue bevorzugte Weg besteht darin, die .format()in PEP 3101 beschriebene und in der Antwort von Dan McDougall erwähnte Methode zu verwenden .
Chris Mueller
495

Oh, die vielen, vielen Möglichkeiten ...

String-Verkettung:

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

Konvertierungsspezifizierer:

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

Verwenden lokaler Variablennamen:

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

Verwenden von str.format():

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

Verwenden von F-Strings:

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

Verwenden von string.Template:

plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))
Dan McDougall
quelle
16
Um den Formatzeichenfolgenoperator mit mehreren Argumenten zu verwenden, kann ein Tupel als Operand verwendet werden : 'foo %d, bar %d' % (foo, bar).
Fiedl
12
Ihr ordentlicher Trick funktioniert auch mit der neuen Formatsyntax:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix
13
Mit der Einführung von F-Strings in Python 3.6 kann dies nun wie folgt geschrieben werden plot.savefig(f'hanning{num}.pdf'). Ich habe eine Antwort mit diesen Informationen hinzugefügt.
Joelostblom
hatte Probleme mit der Verwendung von local () in einer Funktion, die eine globale Variable aufruft; benutzte stattdessen% globals (), was funktionierte
lobi
17

Sie wissen nicht genau, was der gesamte von Ihnen gepostete Code bewirkt, aber um die im Titel gestellte Frage zu beantworten, können Sie + als normale String-Concat-Funktion sowie str () verwenden.

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

Hoffentlich hilft das!

goggin13
quelle
6
Während diese Antwort richtig ist, sollte das Bauen von Strings +vermieden werden, da es extrem teuer ist
Slayton
6

Im Allgemeinen können Sie Zeichenfolgen erstellen mit:

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

Wenn Sie mehrere Werte in die Zeichenfolge einfügen möchten, können Sie diese verwenden format

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

Würde zu der Zeichenfolge führen hanning123.pdf. Dies kann mit jedem Array erfolgen.

Jonathan R.
quelle
3

Ich brauchte eine erweiterte Version davon: Anstatt eine einzelne Zahl in eine Zeichenfolge einzubetten, musste ich eine Reihe von Dateinamen der Form 'file1.pdf', 'file2.pdf' usw. generieren. So funktioniert es hat funktioniert:

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

Sie müssen nur die Zahl varriable mit in eine Zeichenfolge umwandeln

str(num)
Ole
quelle