変数を文字列内に配置するにはどうすればよいですか?


246

をに入れたいintstringですが。これが現在私がしていることです:

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

いくつかの異なる数値に対してプログラムを実行する必要があるため、ループを実行します。ただし、次のように変数を挿入しても機能しません。

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

変数をPython文字列に挿入するにはどうすればよいですか?

回答:


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

%オペレータは、文字列以下のときは、フォーマットコード(を介して、その文字列に値を挿入することができ%d、この場合)。詳細については、Pythonのドキュメントをご覧ください。

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


39
この%演算子はPython 3.1で廃止されていることに注意してください。新しい推奨方法は.format()PEP 3101で説明され、Dan McDougallの回答で述べられている方法を利用することです。
Chris Mueller

495

ああ、多くの、多くの方法...

文字列の連結:

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

変換指定子:

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

ローカル変数名の使用:

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

使用str.format()

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

f-stringsの使用:

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

使用string.Template

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

16
複数の引数を持つフォーマット文字列演算子を使用するには、オペランドとしてタプルを使用できます'foo %d, bar %d' % (foo, bar)
fiedl 2014

12
あまりにも新しい形式の構文を使用して作品のあなたの巧妙なトリックの種類:plot.savefig('hanning{num}s.pdf'.format(**locals()))
PIX

13
Python 3.6でのf-stringsの導入により、これはと書くことができますplot.savefig(f'hanning{num}.pdf')。この情報で回答を追加しました。
joelostblom

グローバル変数を呼び出す関数内でlocals()を使用すると問題が発生しました。代わりに%globals()を使用しました
lobi


17

あなたが投稿したすべてのコードが何をしているのか正確にはわかりませんが、タイトルで提起された質問に答えるには、通常の文字列連結関数として+とstr()を使用できます。

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

お役に立てば幸いです。


6
この答えは正しいですが、文字列を作成+することは非常に高価であるため避けてください
slayton

6

一般に、次を使用して文字列を作成できます。

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

4

文字列に複数の値を入れたい場合は、以下を利用できます。 format

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

文字列になりますhanning123.pdf。これは任意の配列で実行できます。


3

私はこれの拡張バージョンが必要でした:文字列に単一の数値を埋め込む代わりに、「file1.pdf」、「file2.pdf」などの形式の一連のファイル名を生成する必要がありました。働いた:

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

-1

あなたは単に変数変数を文字列にキャストする必要があります

str(num)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.