පයිතන් හි නූලක් කුඩා අකුරු කරන්නේ කෙසේද?


2075

ලොකු අකුරකින් නූලක් හෝ ලොකු අකුරක් කුඩා අකුරකට පරිවර්තනය කිරීමට ක්‍රමයක් තිබේද?

උදාහරණයක් ලෙස, "කිලෝමීටර" → "කිලෝමීටර්".

Answers:



267

පයිතන් හි කුඩා අකුරු බවට නූල් පරිවර්තනය කරන්නේ කෙසේද?

සමස්ත පරිශීලක ආදාන නූලක් ලොකු අකුරෙන් හෝ කුඩා අකුරෙන් කුඩා අකුරක් බවට පරිවර්තනය කිරීමට ක්‍රමයක් තිබේද?

උදා කිලෝමීටර් -> කිලෝමීටර

කැනොනිකල් පයිතොනික් ක්‍රමය මෙයයි

>>> '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

මෙය Python 3 හි str ක්‍රමයකි, නමුත් Python 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 හි අනතුරු ඇඟවීම) බයිට් කිසිදු කේතීකරණයක් නොමැති නූලක තිබීම ගැන විරෝධය දක්වනු ඇත, මන්ද අපේක්ෂිත කේතීකරණය අපැහැදිලි වනු ඇත. බව පිළිබඳ වැඩි වශයෙන්, එම යුනිකෝඩ් කෙසේ-කරන්නේද-යන-බලන්න ලේඛන හා පී 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'

දැන් අපට එය ඇත්තේ a ස්වරූපයෙන් නම් str, අප එය පරිවර්තනය කළ යුතුය unicode. පයිතන්ගේ යුනිකෝඩ් වර්ගය විශ්ව කේතීකරණ ආකෘතියකි, එය වෙනත් බොහෝ කේතන ක්‍රමවලට සාපේක්ෂව බොහෝ වාසි ඇත. අපි එක්කෝ භාවිතා කළ හැකිය unicodeඉදිකිරීමටත් හෝ str.decodeපරිවර්තනය කිරීමට ඇති codec එකේ සමග ක්රමය 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 හි යුනිකෝඩ්ට පයිතන් නූල් වලට කේතනය කළ හැකි අතර පයිතන් නූල් යුනිකෝඩ් වර්ගයට විකේතනය කළ හැකිය.


OP හි ප්‍රශ්නයට අනිවාර්යයෙන්ම අදාළ නොවන එක් සටහනක් මා සතුව ඇත, නමුත් එය සංවේදී නොවන ගැලපීම් සිදු කිරීමේදී අතේ ගෙන යා හැකි (ජාත්‍යන්තරකරණය) සමඟ වැදගත් වේ. සිද්ධි-සංවේදී නොවන ගැලපීම සමඟ, ඩයක්‍රිටික්ස් (උච්චාරණ ලකුණු) සැලකිලිමත් විය හැකිය. උදාහරණය: >>> "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 හි අනවශ්‍ය දෙයක් පමණක් නොව දෝෂයක් ඇති කරයි යැයි පැවසීමෙන් ටිකක් පැහැදිලි විය යුතුය . ( ref ). උදාහරණය: $python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode'@AaronHall හි විශිෂ්ට පිළිතුර සඳහන් කරමින් අපට මෙය කිරීමට දෙවන ක්‍රමයක් දැකිය හැකිය. >>>s.casefold() #result: километр
bballdave025

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.