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

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

Е. Г. Километров --> километров.

7 ответов


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

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


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

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

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

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

Е. Г. Километров --> километров

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

>>> 'Kilometers'.lower()
'kilometers'

однако, если цель состоит в том, чтобы сделать нечувствительное к регистру соответствие, вы должны использовать case-folding:

>>> '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 будет возражать против не-ascii (начиная с Python 2.5 и предупреждения в Python 2.4) байтов, находящихся в строке без кодировки, поскольку предполагаемое кодирование будет неоднозначным. Для получения дополнительной информации об этом см. Unicode how-to в docs и PEP 263

использовать Литералы Юникода, не str литералы

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


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

raw_input('Type Something').lower()

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

Примечание: raw_input была переименована в input в Python 3.X и выше.


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

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

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

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

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


string.lower() используется для преобразования строки в строку нижнего регистра.

например:

word = "Turn Th!S !nt0 a L0w3rCas3! $string"
print(word.lower())

в этом случае, все буквы будут переведены в нижний регистр алфавита.


Если весь текст в верхнем регистре, как "километр", и вы хотите, чтобы только первый символ был в нижнем регистре, то do

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

но чтобы записать всю строку в нижнем регистре, сделайте

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