ฉันจะวางตัวแปรภายในสตริงได้อย่างไร


246

ฉันต้องการที่จะนำเข้าสู่int stringนี่คือสิ่งที่ฉันกำลังทำอยู่ในขณะนี้:

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

ฉันต้องเรียกใช้โปรแกรมสำหรับตัวเลขที่แตกต่างกันดังนั้นฉันต้องการวน แต่การแทรกตัวแปรเช่นนี้ไม่ได้ผล:

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

ฉันจะแทรกตัวแปรลงในสตริง Python ได้อย่างไร

คำตอบ:


163
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

498

โอ้มากมายหลายวิธี ...

การต่อสตริง:

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- สตริง:

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

การใช้string.Template:

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

16
เพื่อใช้ประกอบสตริงรูปแบบที่มีการขัดแย้งหลายหนึ่งสามารถใช้ tuple 'foo %d, bar %d' % (foo, bar)เป็นตัวถูกดำเนินการดังนี้
fiedl

12
เคล็ดลับที่ประณีตของคุณทำงานด้วยไวยากรณ์รูปแบบใหม่เช่นกัน:plot.savefig('hanning{num}s.pdf'.format(**locals()))
pix

13
ด้วยการแนะนำของ F-สตริงในหลาม 3.6 plot.savefig(f'hanning{num}.pdf')นี้ขณะนี้คุณสามารถเขียนเป็น ฉันได้เพิ่มคำตอบด้วยข้อมูลนี้
joelostblom

มีปัญหาในการใช้คนในท้องถิ่น () ภายในฟังก์ชั่นเรียกตัวแปรระดับโลก ใช้% globals () แทนซึ่งใช้งานได้
lobi

123

ด้วยการแนะนำตัวอักษรสตริงที่จัดรูปแบบ ("f-strings" สำหรับคำย่อ) ใน Python 3.6 ตอนนี้เป็นไปได้ที่จะเขียนสิ่งนี้ด้วยไวยากรณ์ briefer:

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

ด้วยตัวอย่างที่ให้ไว้ในคำถามมันจะเป็นแบบนี้

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

3
ปรากฏว่าF-สตริงเข้ากันได้กับหลายสาย
Stevoisiak

17

ไม่แน่ใจว่าสิ่งที่รหัสทั้งหมดที่คุณโพสต์ทำ แต่เพื่อตอบคำถามที่โพสต์ในชื่อคุณสามารถใช้ + เป็นฟังก์ชั่น concat สตริงปกติเช่นเดียวกับ 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

คุณเพียงแค่ต้องใช้ NUM ที่แปรผันเป็นสตริงโดยใช้

str(num)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.