পাইথনে আমি কীভাবে একটি স্ট্রিং ছোট করব?


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 এ আপনি পাইকইউ বা পাই 2 কেসফোল্ড দেখতে চান - বেশ কয়েকটি উত্তর এখানে এটিকে সম্বোধন করে ।

ইউনিকোড পাইথন 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()
Километр

স্ক্রিপ্টগুলিতে পাইথন নন-এসসিআই (পাইথন ২.২ অনুসারে, এবং পাইথন ২.৪-এ সতর্কতা) হিসাবে আপত্তি জানায় বাইটস স্ট্রিংয়ে কোনও এনকোডিং দেওয়া হয়নি, যেহেতু উদ্দেশ্যে কোডিং অস্পষ্ট হবে। যে আরো জানার জন্য, কিভাবে-থেকে ইউনিকোড দেখতে ডক্স এবং 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 সহ, এটি ইউটিএফ -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'আমরা এটি করতে দ্বিতীয় উপায়টি দেখতে পাচ্ছি, @ অ্যারোনহালের দুর্দান্ত উত্তরটি উল্লেখ করে। >>>s.casefold() #result: километр
bবলldave025

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.