मैं एक स्ट्रिंग के अंदर एक चर कैसे डाल सकता हूं?


246

मैं एक intमें एक डाल करना चाहते हैं string। फिलहाल मैं यही कर रहा हूं:

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

मुझे कई अलग-अलग संख्याओं के लिए कार्यक्रम चलाना है, इसलिए मैं एक लूप करना चाहता हूं। लेकिन इस तरह चर डालने से काम नहीं होता:

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

मैं पायथन स्ट्रिंग में एक चर कैसे डालूं?

जवाबों:


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

%ऑपरेटर, जब एक स्ट्रिंग के बाद, आप प्रारूप कोड के माध्यम से कि स्ट्रिंग (में मूल्यों को सम्मिलित करने के लिए अनुमति देता है %dइस मामले में)। अधिक जानकारी के लिए, पायथन प्रलेखन देखें:

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


39
ध्यान दें कि %ऑपरेटर को अजगर 3.1 के रूप में पदावनत किया गया है। नया पसंदीदा तरीका .format()विधि का उपयोग पीईपी 3101 में चर्चा करने और डैन मैकडॉगल के उत्तर में उल्लिखित है।
क्रिस मुलर

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

एफ-स्ट्रिंग्स का उपयोग करना:

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

12
नए फॉर्मेट सिंटैक्स के साथ आपकी साफ सुथरी चाल काम करती है:plot.savefig('hanning{num}s.pdf'.format(**locals()))
पिक्स

13
पायथन 3.6 में एफ-स्ट्रिंग्स की शुरुआत के साथ, इसे अब लिखा जा सकता है plot.savefig(f'hanning{num}.pdf')। मैंने इस जानकारी के साथ एक उत्तर जोड़ा।
joelostblom

स्थानीय चर का उपयोग करके फ़ंक्शन के अंदर स्थानीय () का उपयोग करने के मुद्दे थे; उपयोग किए गए% ग्लोबल्स () के बजाय जिसने काम किया
लोबी

123

पायथन 3.6 में फ़ॉर्मेट किए गए स्ट्रिंग शाब्दिक (संक्षेप में "एफ-स्ट्रिंग्स") की शुरुआत के साथ , अब इसे ब्रीफ़र सिंटैक्स के साथ लिखना संभव है:

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

प्रश्न में दिए गए उदाहरण के साथ, यह इस तरह दिखेगा

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


17

निश्चित रूप से यह सुनिश्चित नहीं है कि आपके द्वारा पोस्ट किया गया सभी कोड क्या है, लेकिन शीर्षक में प्रस्तुत प्रश्न का उत्तर देने के लिए, आप सामान्य स्ट्रिंग कॉन्कटैट फ़ंक्शन के साथ-साथ str () का उपयोग कर सकते हैं।

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

उम्मीद है की वो मदद करदे!


6
हालांकि यह जवाब सही है कि निर्माण के तार +को इसके बेहद महंगे होने से बचा जाना चाहिए
19

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.