Как преобразовать строку в нижний регистр в 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)