2012-05-21 8 views
248

मैं निम्नलिखित कोडपायथन स्ट्रिंग्स में मैं चुनिंदा प्रतिशत (%) से कैसे बच सकता हूं?</p> <pre><code>Print percent % in sentence and not have it break. </code></pre> <p>क्या वास्तव में होता है::

test = "have it break." 
selectiveEscape = "Print percent % in sentence and not %s" % test 

print(selectiveEscape) 

मैं उत्पादन प्राप्त करने के लिए करना चाहते हैं

selectiveEscape = "Use percent % in sentence and not %s" % test 
TypeError: %d format: a number is required, not str 
+0

@ करलकेचटेल: लेकिन फ़ॉर्मेटिंग टेम्पलेट को फ़ाइल से पढ़ा जाने पर मैंने व्यक्तिगत रूप से समस्या से मुलाकात की है। यदि आपके पास फ़ाइल के अंदर क्या है, इस पर कोई नियंत्रण नहीं है, तो सवाल वैध है। – pepr

+0

यदि फ़ॉर्मेटिंग टेम्पलेट फ़ाइल में है, तो टेम्पलेट को सही प्राप्त करना - '%' प्रतीकों के उचित भागने सहित - फ़ाइल निर्माता की ज़िम्मेदारी है। –

+9

यह '\%' क्यों नहीं है? यह मेरा अनुमान था, मैं इसके बजाय '%%' ढूंढने में हैरान हूं - बहुत प्रतिबिंबित लगता है। – Demis

उत्तर

429
>>> test = "have it break." 
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test 
>>> print selectiveEscape 
Print percent % in sentence and not have it break. 
+17

पायथन 3.3.5 में, 'प्रिंट ('% s %% '% 100) 'प्रिंट' 100% '। लेकिन 'प्रिंट ('%%')' प्रिंट '%%'। तो ऐसा लगता है कि अगर आप प्रतिस्थापन नहीं करते हैं तो आपको% संकेतों से बचने की ज़रूरत नहीं है। – Zenadix

+3

@ जेनाडिक्स यह पायथन 2.7 में भी सच है – Tom

+1

ध्यान दें कि 'str 'format()' के पक्ष में '%' विधि वास्तव में बहिष्कृत (पायथन 3 में) है: https://docs.python.org/2/ लाइब्रेरी/stdtypes.html # str.format – dantiston

46

वैकल्पिक रूप से, अजगर 2.6 के रूप में, आप नई स्ट्रिंग स्वरूपण का उपयोग कर सकते हैं (PEP 3101 में वर्णित):

'Print percent % in sentence and not {0}'.format(test) 

जो विशेष रूप से आसान है क्योंकि आपके तार अधिक जटिल हो जाते हैं।

+0

+1 करेगा, जबकि मुझे लगा कि सेशन%-आधारित उत्तर की तलाश में था, मैं इन दिनों 'प्रारूप' का उपयोग करना पसंद करता हूं। –

+2

इसके साथ एकमात्र समस्या यह है कि जब आप जिस पाठ को प्रारूपित करना चाहते हैं वह HTML है जो सीएसएस शैली अनुभाग के साथ है। – Broseph

+0

टेक्स्ट स्वरूपण HTML के लिए आप क्या अनुशंसा करते हैं जिसमें एक सीएसएस शैली अनुभाग, @Broseph है? – DucRP

23

% साइन प्रिंट करने के लिए %% का उपयोग करने का प्रयास करें।

3

यदि फ़ॉर्मेटिंग टेम्पलेट किसी फ़ाइल से पढ़ा गया था, और आप यह सुनिश्चित नहीं कर सकते कि सामग्री प्रतिशत चिह्न को दोगुना कर दे, तो आपको शायद प्रतिशत चरित्र का पता लगाना होगा और प्रोग्रामेटिक रूप से निर्णय लेना होगा कि यह प्लेसहोल्डर की शुरुआत है या नहीं। फिर पार्सर को %d (और अन्य अक्षरों का उपयोग किया जा सकता है), लेकिन %(xxx)s आदि

इसी तरह की समस्या को नए प्रारूपों के साथ देखा जा सकता है - पाठ में घुंघराले ब्रेसिज़ हो सकते हैं।

3

आप चुनिंदा % से बच नहीं सकते हैं, % के रूप में हमेशा निम्नलिखित वर्ण के आधार पर एक विशेष अर्थ है।

अजगर की documentation में, उस अनुभाग में दूसरी तालिका के bottem में, यह कहा गया है:

'%'  No argument is converted, results in a '%' character in the result. 

इसलिए आप उपयोग करना चाहिए:

selectiveEscape = "Print percent %% in sentence and not %s" % (test,) 

(कृपया ध्यान दें expicit परिवर्तन % पर तर्क के रूप में tuple)

उपर्युक्त के बारे में जानने के बिना, मैंने किया होगा:

selectiveEscape = "Print percent %s in sentence and not %s" % ('%', test) 

जो ज्ञान आप स्पष्ट रूप से पहले से ही जानते थे।