Вопрос: Как преобразовать строку в нижний регистр в Python


Есть ли способ конвертировать строку из верхнего регистра или даже в верхний регистр в нижний регистр?

Например. Километры -> километров.


1441


источник


Ответы:


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

Официальная документация str.lower(),


2259



С Python 2 это не работает для неанглийских слов в UTF-8. В этом случае decode('utf-8')может помочь:

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

150



Как преобразовать строку в нижний регистр в Python?

Есть ли способ конвертировать всю введенную пользователем строку из верхнего регистра или даже в верхний регистр в нижний регистр?

Например. Километры -> километров

Канонический питонический способ сделать это

>>> '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 - несколько ответов адресуют это здесь ,

Unicode Python 3

Python 3 обрабатывает unicode как обычные строки:

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

Unicode Python 2

Но Python 2 не, ниже, вставляется в оболочку, кодирует литерал как строку байтов, используя 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()
Километр

В сценариях Python будет возражать против non-ascii (как из Python 2.5 и предупреждения в Python 2.4), байты находятся в строке без кодировки, поскольку предполагаемое кодирование будет неоднозначным. Подробнее об этом см. В руководстве по Unicode в документы а также PEP 263

Используйте литералы Unicode, а не strлитералы

Поэтому нам нужно unicodestring для обработки этого преобразования, легко выполняемого с помощью символа unicode:

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

Обратите внимание, что байты полностью отличаются от strбайты - escape-символ '\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, Тип юникода Python - это универсальный формат кодирования, который имеет много преимущества по сравнению с большинством других кодировок. Мы можем либо использовать 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.


100



Вы можете делать то, что Питер сказал , или если вы хотите, чтобы пользователь вводил что-то, вы могли бы сделать это:

raw_input('Type Something').lower()

Затем он автоматически преобразует то, что они набрали в нижнем регистре.

Заметка: raw_inputбыло переименовано в inputв Python 3.x и выше.


71



Кроме того, вы можете перезаписать некоторые переменные:

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

Если вы используете так:

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

Он будет работать только при вызове.


17



Если весь текст имеет верхний регистр, например «KILOMETER», и вы хотите, чтобы первый символ был уменьшен, сделайте

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

Но чтобы очертить всю строку, выполните

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

0