Как преобразовать строку в нижний кейс на Python 2 и 3
- Преобразование строки в нижний регистр на Python 3
- Конвертируйте строку в младший регистр на Python 2.7
- Заключение
Преобразование строки в нижний регистр на Python 3
str
, поскольку Python 3.0 содержит по умолчанию символы Unicode
, что означает, что любая строка вроде "unicode example"
, 'unicode example 2'
хранится как Unicode
.
Поэтому вы можете использовать str.lower()
для преобразования любой строки в младший регистр на Python 3.
exampleString = "CaseString"
exampleString.lower()
#Out: 'casestring'
exampleString = "СтрокаСлучая"
exampleString.lower()
#Out: 'строкаслучая'
str.casefold()
бескорректное преобразование
str.lower()
преобразует строку в нижний регистр, но не преобразует различия в регистре в строке.
Например, ß
в немецком языке равнозначно double s
- ss
, а ß
сама по себе уже строка в нижнем регистре, поэтому str.lower()
не преобразует ее.
Но str.casefold()
превратит ß
в ss
.
>>> 'Straße'.lower()
'straße'
>>> 'Straße'.casefold()
'strasse'
Конвертируйте строку в младший регистр на Python 2.7
Тип str
на Python 2.7 не хранится как Unicode
, а строки Unicode
являются экземплярами типа unicode
. Мы должны различать, является ли строка ASCII
строкой или Unicode
строкой, когда мы преобразуем строку в младший регистр.
Тип ASCII
Это то же самое, что и метод, используемый на Python 3. str.lower()
преобразует строку в нижний регистр.
exampleString = "CaseStringExample"
exampleString.lower()
#Out: 'casestringexample'
тип unicode
Если символы в строке имеют тип unicode
, и строка явно не представлена в типе unicode
, то метод str.lower()
вообще не преобразует строку в нижний регистр.
exampleString = "СтрокаСлучая"
print exampleString.lower()
#Out: СтрокаСлучая
exampleString.lower() == exampleString
#Out: True
Pythonовые объекты к не-ASCII байтам в строке с отсутствием кодирования даны потому, что предполагаемое кодирование неявно.
Уникодирование Unicode
литералов, но не str
.
exampleUnicodeString = u"СтрокаСлучая"
exampleUnicode
#u'\u0421\u0442\u0440\u043e\u043a\u0430\u0421\u043b\u0443\u0447\u0430\u044f'
exampleUnicodeString.lower()
#u'\u0441\u0442\u0440\u043e\u043a\u0430\u0441\u043b\u0443\u0447\u0430\u044f'
print exampleUnicodeString.lower()
#Out: строкаслучая
Здесь видно, что первый символ строки конвертируется из \u0421
в \u0441
.
Преобразовать str
в unicode
Если заданная строка в виде str
, то сначала нужно преобразовать ее в unicode
перед преобразованием в нижний регистр.
exampleString = "СтрокаСлучая"
print exampleString.decode('utf-8').lower()
#Out: строкаслучая
Заключение
Метод lower()
- это метод преобразования строки в нижний регистр как на Python 2, так и на Python 3, но с заметной разницей.
Строка на Python 3 по умолчанию является строкой unicode
, а на Python 2 - нет. Если строка явно не представлена как unicode
, например, не ставить u
перед строкой, то строка в юникоде вообще не будет конвертирована в строку в нижнем регистре.
str.casefold
преобразует различия в регистре в их бескорпусные совпадения, но доступно только на Python 3. Вы можете установить py2casefold на Python 2.