मैं पायथन स्ट्रिंग्स में चुनिंदा प्रतिशत (%) से कैसे बच सकता हूं?


364

मेरे पास निम्न कोड है

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

print(selectiveEscape)

मैं आउटपुट प्राप्त करना चाहूंगा:

Print percent % in sentence and not have it break.

वास्तव में क्या होता है:

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

57
क्यों नहीं है \%? यह मेरा अनुमान था, मुझे आश्चर्य है कि इसके %%बजाय यह मिल रहा है - बहुत अच्छा लगता है।
डेमिस

3
% iका अर्थ है "एक पूर्णांक का एक दशमलव प्रतिनिधित्व, गद्देदार रिक्त स्थान के साथ छोड़ दिया।
एंटी हापला

3
इस फंक्शन का मतलब भाषा वाक्य रचना नहीं है। इसलिए अगर पलायन \%होता तो वास्तव \\%में साधारण कोड में लिखा होता । <escape><escape>विशिष्ट पैटर्न जो मैंने देखा है, और \बेहतर या बदतर के लिए सबसे आम बच चरित्र है।
किन्नर

1
@ डेमिस और \ यदि आप प्रिंट करना चाहते हैं तो आप कैसे बचेंगे \\%? आप विशेष वर्णों की पुनरावृत्ति के माध्यम से भागने की आवश्यकता के लिए बाध्य हैं, यदि विशेष वर्ण भी परिस्थितियों के आधार पर विशेष नहीं हैं।
सस्सा NF

2
मुझे लगता है कि यह पायथन में गुस्सा है कि शाब्दिक% "%%" द्वारा एन्कोड किया गया है और "\"% द्वारा नहीं।
MasterControlProgram

जवाबों:


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

38
पायथन 3.3.5 में, print('%s%%' % 100)प्रिंट करता है 100%। लेकिन print('%%')प्रिंट करता है %%। यदि आप प्रतिस्थापन नहीं करते हैं तो ऐसा लगता है कि आपको% संकेतों से बचना नहीं है।
जिनाडिक्स

5
@Zenadix यह पायथन 2.7 में भी सच है
टॉम

2
ध्यान दें कि %विधि वास्तव में पदावनत है (पायथन 3 में) str.format(): docs.python.org/2/library/stdtypes.html#str.format
dantiston

8
ध्यान दें कि %विधि पायथन 3.6 में मूल्यह्रास नहीं है। यह सी, सी ++, आदि के लिए इसकी समानता के समर्थन में जारी रहेगा str.format()और एफ-स्ट्रिंग को पसंद किया जाता है लेकिन लागू नहीं किया जाता है।
आरोन

बस ध्यान दिया जाता है कि यदि स्ट्रिंग एक जोंस स्ट्रिंग है, तो एक फ़ाइल से पढ़ी जा रही है जिसे आपको %साइन से बचने की आवश्यकता नहीं है । बस %करेंगे
wander95

57

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

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

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


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

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

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

1
मैं गलत था। यदि आप अपने CSS में डबल ब्रेसेस का उपयोग करते हैं तो आप ठीक हैं।
ब्रोसेफ

37

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


5

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

पायथन के प्रलेखन में, उस खंड में दूसरी तालिका के बॉटम पर, यह कहा गया है:

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

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

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

(कृपया तर्क के रूप में विस्तार से स्पष्ट परिवर्तन को नोट करें % )

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

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

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


3

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

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


1

यदि आप Python 3.6 या नए का उपयोग कर रहे हैं , तो आप f-string का उपयोग कर सकते हैं :

>>> test = "have it break."
>>> selectiveEscape = f"Print percent % in sentence and not {test}"
>>> print(selectiveEscape)
... Print percent % in sentence and not have it break.

-3

मैंने एक सबप्लॉट शीर्षक प्रिंट करने के लिए विभिन्न तरीकों की कोशिश की है, देखो कि वे कैसे काम करते हैं। यह अलग है जब मैं लेटेक्स का उपयोग करता हूं।

यह एक विशिष्ट मामले में '%%' और 'स्ट्रिंग' + '%' के साथ काम करता है।

यदि आप लेटेक्स का उपयोग करते हैं तो यह 'स्ट्रिंग' + '%' का उपयोग करके काम करता है

तो एक विशिष्ट मामले में:

import matplotlib.pyplot as plt
fig,ax = plt.subplots(4,1)
float_number = 4.17
ax[0].set_title('Total: (%1.2f' %float_number + '\%)')
ax[1].set_title('Total: (%1.2f%%)' %float_number)
ax[2].set_title('Total: (%1.2f' %float_number + '%%)')
ax[3].set_title('Total: (%1.2f' %float_number + '%)')

% के साथ उदाहरण शीर्षक

यदि हम लेटेक्स का उपयोग करते हैं:

import matplotlib.pyplot as plt
import matplotlib
font = {'family' : 'normal',
        'weight' : 'bold',
        'size'   : 12}
matplotlib.rc('font', **font)
matplotlib.rcParams['text.usetex'] = True
matplotlib.rcParams['text.latex.unicode'] = True
fig,ax = plt.subplots(4,1)
float_number = 4.17
#ax[0].set_title('Total: (%1.2f\%)' %float_number) This makes python crash
ax[1].set_title('Total: (%1.2f%%)' %float_number)
ax[2].set_title('Total: (%1.2f' %float_number + '%%)')
ax[3].set_title('Total: (%1.2f' %float_number + '\%)')

हमें यह मिलता है: % और लेटेक्स के साथ शीर्षक उदाहरण

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