2010-05-17 16 views
17

स्ट्रिंग स्वरूपित करते समय, मेरी स्ट्रिंग में एक मॉड्यूलो "%" हो सकता है जिसे मैं परिवर्तित नहीं करना चाहता हूं। मैं स्ट्रिंग से बच सकता हूं और प्रत्येक "%" से "%%" को वर्कअराउंड के रूप में बदल सकता हूं।पायथन स्ट्रिंग स्वरूपण जब स्ट्रिंग में "% s" होता है

जैसे

'Day old bread, 50%% sale %s' % 'today!' 

उत्पादन:

'Day old bread, 50% sale today' 

लेकिन वहाँ से बचने के लिए किसी भी विकल्प हैं? मैं उम्मीद कर रहा था कि एक निर्देश का उपयोग करके ऐसा होता है ताकि पाइथन किसी भी गैर-कीवर्ड रूपांतरणों को अनदेखा कर दे।
जैसे

'Day old bread, 50% sale %(when)s' % {'when': 'today'} 

लेकिन अजगर अभी भी पहले सापेक्ष % देखता है और देता है एक:

TypeError: not enough arguments for format string 
+2

% से बचने का कामकाज नहीं है, यह ऐसा करने का एक दस्तावेज और आधिकारिक तरीका है। – SilentGhost

उत्तर

22

आप (और चाहिए) new string .format() method (आप अजगर 2.6 या उच्चतर किया है) के बजाय इस्तेमाल कर सकते हैं:

"Day old bread, 50% sale {0}".format("today") 

The manual can be found here

दस्तावेज़ यह भी कहते हैं कि पुराने % प्रारूपण को भाषा से हटा दिया जाएगा, हालांकि इसमें निश्चित रूप से कुछ समय लगेगा। नई स्वरूपण विधियां रास्ता अधिक शक्तिशाली हैं, इसलिए यह एक अच्छी बात है।

+0

जब तक आप "{{0}} = {0}" प्रारूप ("आज") मुद्रित नहीं करना चाहते हैं, तो आप घुंघराले ब्रेसिज़ को दोगुना करना पसंद नहीं करेंगे। : ^) –

+0

@ मार्क टोलोनन उग, मैं विशेष रूप से "{{0}}" के समाधान को खोजने की उम्मीद कर रहा हूं। प्रारूप (...) समस्या ... – KSletmoe

2

नहीं वास्तव में - अपने% संकेत से बचने कीमत है जो आप स्ट्रिंग स्वरूपण का उपयोग कर के लिए भुगतान करते हैं। आप इसके बजाय स्ट्रिंग कॉन्सटेनेशन का उपयोग कर सकते हैं: 'Day old bread, 50% sale ' + whichday यदि यह मदद करता है ...

+0

जहां मुझे पाइथन 2.5 या इससे पहले का समर्थन करने की आवश्यकता है, यह वह तरीका है जिसका मैं उपयोग करूंगा। –

2

'%' से '%%' से बचने का कामकाज नहीं है। यदि आप स्ट्रिंग स्वरूपण का उपयोग करते हैं जो '%' चिह्न का प्रतिनिधित्व करने का तरीका है। यदि आप यह नहीं चाहते हैं, तो आप हमेशा कुछ ऐसा कर सकते हैं:

print "Day old bread, 50% sale " + "today" 

उदा। स्वरूपण का उपयोग नहीं कर रहा है।

कृपया ध्यान दें कि स्ट्रिंग concatenation का उपयोग करते समय, सुनिश्चित करें कि चर एक स्ट्रिंग है (और उदाहरण नहीं है) या str(varName) का उपयोग करें। अन्यथा आपको कुछ मिलता है जैसे 'str को जोड़ना नहीं है और कोई नहीं टाइप करें'।

2

आप जहां% की (

def format_with_dict(str, dictionary): 
    str = re.sub(r"%([^\(])", r"%%\1", str) 
    str = re.sub(r"%$", r"%%", str) # There was a % at the end? 
    return str % dictionary 

इस तरह का पालन नहीं किया %% द्वारा% बदलने के लिए रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:

print format_with_dict('Day old bread, 50% sale %(when)s', {'when': 'today'}) 

विल उत्पादन:

डे वर्ष रोटी, 50% बिक्री आज

यह विधि "प्रारूप स्ट्रिंग के लिए पर्याप्त तर्क नहीं" त्रुटियों से बचने के लिए उपयोगी है।

संबंधित मुद्दे