मैं पायथन में एक स्ट्रिंग कैसे कम कर सकता हूं?


2054

क्या अपरकेस से एक स्ट्रिंग को बदलने का एक तरीका है, या यहां तक ​​कि अपरकेस को निचले हिस्से में बदलना है?

उदाहरण के लिए, "किलोमीटर" → "किलोमीटर"।

जवाबों:



259

पायथन में स्ट्रिंग को लोअरकेस में कैसे बदलें?

क्या पूरे उपयोगकर्ता इनपुट स्ट्रिंग को अपरकेस, या यहां तक ​​कि अपरकेस से लोअरकेस में बदलने का कोई तरीका है?

जैसे किलोमीटर -> किलोमीटर

ऐसा करने का विहित पायथोनिक तरीका है

>>> 'Kilometers'.lower()
'kilometers'

हालाँकि, यदि उद्देश्य असंवेदनशील मिलान करने का है, तो आपको केस-फोल्डिंग का उपयोग करना चाहिए:

>>> 'Kilometers'.casefold()
'kilometers'

यहाँ पर क्यों:

>>> "Maße".casefold()
'masse'
>>> "Maße".lower()
'maße'
>>> "MASSE" == "Maße"
False
>>> "MASSE".lower() == "Maße".lower()
False
>>> "MASSE".casefold() == "Maße".casefold()
True

यह पायथन 3 में एक कठिन विधि है, लेकिन पायथन 2 में, आप PyICU या py2casefold को देखना चाहेंगे - कई उत्तर यहां दिए गए हैं

यूनिकोड पायथन 3

पायथन 3 यूनिकोड के रूप में सादे स्ट्रिंग शाब्दिक संभालता है:

>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'

पायथन 2, सादे स्ट्रिंग शाब्दिक बाइट्स हैं

पायथन 2 में, नीचे, एक शेल में चिपकाया गया, शाब्दिक को बाइट्स की एक स्ट्रिंग के रूप में एन्कोड करता है, का उपयोग करके utf-8

और lowerबाइट्स के बारे में पता करने वाले किसी भी बदलाव को मैप नहीं करता है, इसलिए हमें एक ही स्ट्रिंग मिलती है।

>>> string = 'Километр'
>>> string
'\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80'
>>> string.lower()
'\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80'
>>> print string.lower()
Километр

स्क्रिप्ट्स में, पायथन नॉन-एस्की (पायथन 2.5 के रूप में, और पायथन 2.4 में चेतावनी) पर आपत्ति करेगा, बाइट बिना किसी एन्कोडिंग के एक स्ट्रिंग में हो रही है, क्योंकि इच्छित कोडिंग अस्पष्ट होगी। उस पर अधिक के लिए, डॉक्स और PEP 263 में यूनिकोड को कैसे देखें

यूनिकोड शाब्दिकों का उपयोग करें, strशाब्दिकों का नहीं

इसलिए हमें unicodeइस रूपांतरण को संभालने के लिए एक स्ट्रिंग की आवश्यकता है , जिसे एक यूनिकोड स्ट्रिंग शाब्दिक के साथ आसानी से पूरा किया जाता है, जो एक uउपसर्ग के साथ संवितरित होता है (और ध्यान दें कि uउपसर्ग भी पायथन 3 में काम करता है):

>>> unicode_literal = u'Километр'
>>> print(unicode_literal.lower())
километр

ध्यान दें कि बाइट्स बाइट्स से पूरी तरह से अलग हैं str- बच चरित्र '\u'2-बाइट चौड़ाई, या इन unicodeअक्षरों के 16 बिट प्रतिनिधित्व के बाद है :

>>> unicode_literal
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> unicode_literal.lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'

अब अगर हमारे पास यह केवल एक के रूप में है str, तो हमें इसे बदलने की आवश्यकता है unicode। पायथन का यूनिकोड प्रकार एक सार्वभौमिक एन्कोडिंग प्रारूप है जिसमें अधिकांश अन्य एन्कोडिंग के सापेक्ष कई फायदे हैं । हम या तो unicodeकंस्ट्रक्टर या str.decodeविधि का उपयोग करने के लिए कोडेक strको unicodeनिम्न में बदल सकते हैं :

>>> unicode_from_string = unicode(string, 'utf-8') # "encoding" unicode from string
>>> print(unicode_from_string.lower())
километр
>>> string_to_unicode = string.decode('utf-8') 
>>> print(string_to_unicode.lower())
километр
>>> unicode_from_string == string_to_unicode == unicode_literal
True

दोनों विधियाँ यूनिकोड प्रकार में परिवर्तित होती हैं - और यूनिकोड_लिटरल के समान।

सर्वश्रेष्ठ अभ्यास, यूनिकोड का उपयोग करें

यह अनुशंसा की जाती है कि आप हमेशा यूनिकोड में पाठ के साथ काम करें

सॉफ्टवेयर को केवल यूनिकोड स्ट्रिंग्स के साथ आंतरिक रूप से काम करना चाहिए, आउटपुट पर एक विशेष एन्कोडिंग में परिवर्तित करना।

आवश्यकता पड़ने पर वापस एनकोड कर सकते हैं

हालाँकि, लोअरकेस को वापस पाने के लिए str, अजगर स्ट्रिंग को utf-8फिर से एनकोड करें:

>>> print string
Километр
>>> string
'\xd0\x9a\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80'
>>> string.decode('utf-8')
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> string.decode('utf-8').lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> string.decode('utf-8').lower().encode('utf-8')
'\xd0\xba\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80'
>>> print string.decode('utf-8').lower().encode('utf-8')
километр

तो पायथन 2 में, यूनिकोड पायथन स्ट्रिंग्स में एन्कोड कर सकता है, और पाइथन स्ट्रिंग्स यूनिकोड प्रकार में डिकोड कर सकता है।


मेरे पास एक नोट है जो जरूरी नहीं कि ओपी के प्रश्न पर लागू होता है, लेकिन जो असंवेदनशील मिलान करते समय पोर्टेबिलिटी (अंतर्राष्ट्रीयकरण) के साथ महत्वपूर्ण है। केस-असंवेदनशील मिलान के साथ, डायटिचर (उच्चारण चिह्न) चिंता का विषय बन सकता है। उदाहरण: >>> "raison d'être".casefold(); "raison d'être"की जाँच करें इस उत्तर के बारे मेंunidecode
bballdave025

198

पायथन 2 के साथ, यह UTF-8 में गैर-अंग्रेजी शब्दों के लिए काम नहीं करता है। इस मामले में decode('utf-8')मदद कर सकते हैं:

>>> s='Километр'
>>> print s.lower()
Километр
>>> print s.decode('utf-8').lower()
километр

8
शायद हमें यह कहकर थोड़ा और स्पष्ट होना चाहिए कि decode('utf-8')पायथन 3 में न केवल अनावश्यक है, बल्कि एक त्रुटि का कारण बनता है। ( रेफ )। उदाहरण: $python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode'हम @AaronHall के उत्कृष्ट उत्तर को संदर्भित करते हुए, ऐसा करने का दूसरा तरीका देख सकते हैं। >>>s.casefold() #result: километр
बेल्डेलेव ०२५

20

इसके अलावा, आप कुछ चर को अधिलेखित कर सकते हैं:

s = input('UPPER CASE')
lower = s.lower()

यदि आप इस तरह का उपयोग करते हैं:

s = "Kilometer"
print(s.lower())     - kilometer
print(s)             - Kilometer

यह सिर्फ जब कहा जाता है काम करेगा।


10
सवाल यह है कि स्ट्रिंग को लोअरकेस में कैसे बदलना है। इस उत्तर को इतने अधिक वोट कैसे मिले?
मुनीम मुन्ना

1
s=s.lower() जाने का रास्ता है।
m00lti

1

यह पूरी तरह से संयुक्त राष्ट्र की सिफारिश की कोशिश मत करो, यह मत करो:

import string
s='ABCD'
print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s]))

आउटपुट:

abcd

चूंकि किसी ने इसे नहीं लिखा था, swapcaseइसलिए आप इसका उपयोग कर सकते हैं (इसलिए अपरकेस अक्षर लोअरकेस हो जाएंगे, और इसके विपरीत) (और यह आपको उन मामलों में उपयोग करना चाहिए, जहां मैंने अभी उल्लेख किया है (ऊपरी से निचले, निचले से ऊपरी में कनवर्ट करें):

s='ABCD'
print(s.swapcase())

आउटपुट:

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