Existe uma maneira de converter uma seqüência de caracteres em maiúsculas ou mesmo parte maiúscula em minúscula?
Por exemplo, "Quilômetros" → "quilômetros".
Use .lower()
- por exemplo:
s = "Kilometer"
print(s.lower())
A documentação oficial 2.x está aqui:
A documentação oficial 3.x está aqui:str.lower()
str.lower()
Como converter string para minúsculas em Python?
Existe alguma maneira de converter uma seqüência de caracteres inserida pelo usuário inteira de maiúscula ou mesmo parte maiúscula para minúscula?
Por exemplo Quilômetros -> quilômetros
A maneira pitônica canônica de fazer isso é
>>> 'Kilometers'.lower()
'kilometers'
No entanto, se o objetivo é fazer uma correspondência sem distinção entre maiúsculas e minúsculas, você deve usar a dobra de maiúsculas e minúsculas:
>>> 'Kilometers'.casefold()
'kilometers'
Aqui está o porquê:
>>> "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
Este é um método str no Python 3, mas no Python 2, você deve examinar o PyICU ou py2casefold - várias respostas abordam isso aqui .
O Python 3 manipula literais de cadeia simples como unicode:
>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
No Python 2, o abaixo, colado em um shell, codifica o literal como uma sequência de bytes, usando utf-8
.
E lower
não mapeia nenhuma alteração que os bytes tenham conhecimento, então obtemos a mesma string.
>>> 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()
Километр
Nos scripts, o Python objetará que bytes não-ascii (no Python 2.5 e aviso no Python 2.4) estejam em uma string sem codificação fornecida, pois a codificação pretendida seria ambígua. Para obter mais informações, consulte o tutorial sobre Unicode nos documentos e PEP 263
str
literaisPortanto, precisamos de uma unicode
string para lidar com essa conversão, realizada facilmente com uma literal de string unicode, que desambigua um u
prefixo (e observe que o u
prefixo também funciona no Python 3):
>>> unicode_literal = u'Километр'
>>> print(unicode_literal.lower())
километр
Observe que os bytes são completamente diferentes dos str
bytes - o caractere de escape é '\u'
seguido pela largura de 2 bytes ou pela representação de 16 bits dessas unicode
letras:
>>> unicode_literal
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> unicode_literal.lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
Agora, se o temos apenas na forma de a str
, precisamos convertê-lo para unicode
. O tipo Unicode do Python é um formato de codificação universal que possui muitas vantagens em relação à maioria das outras codificações. Podemos usar o unicode
construtor ou o str.decode
método com o codec para converter o str
em 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
Ambos os métodos são convertidos para o tipo unicode - e o mesmo que o unicode_literal.
É recomendável que você sempre trabalhe com texto em Unicode .
O software deve funcionar apenas com cadeias Unicode internamente, convertendo para uma codificação específica na saída.
No entanto, para obter o tipo de letra minúscula novamente str
, codifique a string python utf-8
novamente:
>>> 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')
километр
Portanto, no Python 2, o Unicode pode codificar em seqüências de caracteres Python, e as strings de Python podem decodificar no tipo Unicode.
>>> "raison d'être".casefold(); "raison d'être"
Confira esta resposta sobreunidecode
Com o Python 2, isso não funciona para palavras não inglesas no UTF-8. Nesse caso,
decode('utf-8')
pode ajudar:fonte
decode('utf-8')
não é apenas desnecessário no Python 3, mas causa um erro. ( ref ) Exemplo:$python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode'
podemos ver uma segunda maneira de fazer isso, referenciando a excelente resposta de @AaronHall.>>>s.casefold() #result: километр
Além disso, você pode substituir algumas variáveis:
Se você usa assim:
Funcionará exatamente quando chamado.
fonte
s=s.lower()
é o caminho a percorrer.Não tente isso, totalmente não recomendado, não faça isso:
Resultado:
Como ninguém o escreveu ainda, você pode usá-
swapcase
lo (para que as letras maiúsculas se tornem minúsculas e vice-versa) (e essa você deve usar nos casos em que acabei de mencionar (converter superior para inferior, inferior para superior)):Resultado:
fonte