python - كيف - ملخص لغة بايثون




كيفية تحويل سلسلة إلى صغيرة في بايثون (6)

كيفية تحويل سلسلة إلى صغيرة في بايثون؟

هل هناك أي طريقة لتحويل سلسلة كاملة إدخال المستخدم من الأحرف الكبيرة ، أو حتى جزء كبير إلى صغير؟

على سبيل المثال كيلومترات -> كم

والطريقة البيثونية الكنسية للقيام بذلك هي

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

هذه طريقة str في Python 3 ، ولكن في Python 2 ، سترغب في الاطلاع على PyICU أو py2casefold - هناك عدة إجابات تتناول هذا هنا .

يونيكود بايثون 3

بايثون 3 يعالج يونيكود كسلسلة عادية:

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

يونيكود بايثون 2

لكن Python 2 لا ، في الأسفل ، بلصق في shell ، يشفر الحرفية كسلسلة من وحدات البايت ، باستخدام utf-8 .

lower لا يرسم أي تغييرات ستعرفها كائنات Unicode الأصلية ، لذا نحصل على نفس السلسلة.

>>> 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()
Километр

في النصوص ، سوف تعترض بايثون على غير ascii (كما في Python 2.5 ، والتحذير في بايثون 2.4) بايت في سلسلة بدون ترميز معين ، لأن التشفير المقصود سيكون غامضًا. لمعرفة المزيد عن ذلك ، راجع كيفية استخدام Unicode في docs و PEP 263

استخدام الحرفي يونيكود ، وليس حرفية حرف

لذلك نحتاج إلى سلسلة unicode لمعالجة هذا التحويل ، ويتم إنجازه بسهولة باستخدام حرفية unicode:

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

لاحظ أن البايتات مختلفة تمامًا عن وحدات البايت str - حرف الهروب هو '\u' متبوعًا بعرض 2 بايت أو تمثيل 16 بت لأحرف unicode هذه:

>>> 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 . نوع بايثون يونيكود هو تنسيق ترميز عالمي له العديد من advantages المتعلقة بمعظم الترميزات الأخرى. يمكننا إما استخدام منشئ 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

كلا الطريقتين تحويل إلى نوع unicode - ونفس unicode_literal.

أفضل الممارسات ، استخدم Unicode

يوصى بالعمل دائمًا مع النص في Unicode .

يجب أن تعمل البرامج مع سلاسل Unicode داخليًا فقط ، مع التحويل إلى ترميز معين على المخرجات.

يمكن ترميز مرة أخرى عند الضرورة

ومع ذلك ، للحصول على أحرف صغيرة في str ، قم بترميز سلسلة python إلى 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')
километр

حتى في Python 2 ، يمكن لـ Unicode ترميز سلاسل Python ، ويمكن فك سلاسل Python في نوع Unicode.

هل هناك طريقة لتحويل سلسلة من أحرف كبيرة ، أو حتى جزء كبير إلى أحرف صغيرة؟

على سبيل المثال كيلومترات -> كم.


يتم شرح بعض طرق سلسلة بايثون الأساسية أدناه ##:

خفض

يحول أسلوب string () السفلي جميع الأحرف الكبيرة في سلسلة إلى أحرف صغيرة ويعيدها.

مثال:

string = "HeLLO PyTHON"
new_string = string.lower()

print string
print new_string

انتاج:

HeLLO PyTHON
hello python

الاستفادة من :

في بايثون ، تقوم الطريقة الرأسمالية () بتحويل أول حرف لسلسلة إلى حرف كبير (كبير).

مثال:

string = "hello python"
new_string = string.capitalize()

print string
print new_string

انتاج:

hello python
Hello python

Swapcase :

يحول أسلوب swapcase () لكافة الأحرف الكبيرة إلى أحرف صغيرة وكل الأحرف الصغيرة إلى أحرف كبيرة من السلسلة المحددة ويعيدها.

string = "HEllO PythOn"
new_string = string.swapcase()

print string
print new_string

انتاج |

HEllO PythOn
heLLo pYTHoN

إذا كان النص بأكمله حرفًا كبيرًا مثل "KILOMETER" ، وتريد فقط أن يتم تخفيض الحرف الأول ، فافعل

text = "KILOMETER"
result = text[:1] + text[1:].lower() 
print(result)

ولكن لتخفيض سلسلة كاملة ، افعل

text = "KILOMETER"
text = text.lower()
print(text)

إذا كنت ترغب في استخدام map لتنفيذ هذه العملية على سلاسل متعددة في قائمة ، فستحتاج إلى استخدام str.lower وليس مجرد lower :

words = ['CATS', 'KITTENS', 'Pirate Cats', 'fluffy felines']
list(map(str.lower, words))

عائدات

['cats', 'kittens', 'pirate cats', 'fluffy felines']

مع Python 2 ، لا يعمل ذلك مع الكلمات غير الإنجليزية في UTF-8. في هذه الحالة decode('utf-8') يمكن أن يساعد decode('utf-8') :

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

يمكنك أن تفعل ما قاله بطرس ، أو إذا كنت تريد من المستخدم إدخال شيء يمكنك القيام به:

raw_input('Type Something').lower()

وسيقوم تلقائيًا بتحويل الشيء الذي كتبته إلى أحرف صغيرة.

ملاحظة: تم إعادة تسمية raw_input input في Python 3.x والإصدارات الأحدث.





lowercase