Cómo convertir cadenas a minúsculas en Python


¿Hay alguna manera de convertir una cadena de mayúscula, o incluso parte de mayúscula a minúscula?

Por ejemplo, kilómetros -> kilómetros.


Answers


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

La documentación oficial es str.lower() .




Esto no funciona para palabras que no sean en inglés en UTF-8. En este caso, la decode('utf-8') puede ayudar:

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



Puedes hacer lo que dijo Peter , o si quieres que el usuario ingrese algo, puedes hacer esto:

raw_input('Type Something').lower()

A continuación, convertirá automáticamente lo que escribieron en minúsculas.

Nota: raw_input se renombró para input en Python 3.xy superior.




¿Cómo convertir cadenas a minúsculas en Python?

¿Hay alguna manera de convertir una cadena ingresada de usuario completa de mayúscula, o incluso parte mayúscula a minúscula?

Ej. Kilómetros -> kilómetros

La manera canónica de hacer esto es Pythonic

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

Sin embargo, si el propósito es hacer una coincidencia insensible a las mayúsculas y minúsculas, debe usar plegado de mayúsculas y minúsculas:

>>> "MASSE" == "Maße"
False
>>> "MASSE".lower() == "Maße".lower()
False
>>> "MASSE".casefold() == "Maße".casefold()
True

Este es un método str en Python 3, pero en Python 2, querrá ver la PyICU o py2casefold; varias respuestas abordan esto aquí .

Unicode Python 3

Python 3 maneja unicode como cadenas regulares:

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

Unicode Python 2

Pero Python 2 no, a continuación, pegado en un shell, codifica el literal como una cadena de bytes, usando utf-8 .

Y lower no correlaciona los cambios que los objetos Unicode nativos tendrían en cuenta, por lo que obtenemos la misma cadena.

>>> 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()
Километр

En las secuencias de comandos, Python objetará que los bytes que no son ascii (a partir de Python 2.5 y advertencia en Python 2.4) están en una cadena sin codificación, ya que la codificación prevista sería ambigua. Para obtener más información al respecto, consulte el instructivo Unicode en los documentos y PEP 263.

Utilice literales Unicode, no literales str

Por lo tanto, necesitamos una cadena unicode para manejar esta conversión, que se realiza fácilmente con un literal Unicode:

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

Tenga en cuenta que los bytes son completamente diferentes de los bytes str - el carácter de escape es '\u' seguido por el ancho de 2 bytes, o la representación de 16 bits de estas letras unicode :

>>> unicode_literal
u'\u041a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'
>>> unicode_literal.lower()
u'\u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440'

Ahora si solo lo tenemos en forma de str , necesitamos convertirlo a unicode . El tipo Unicode de Python es un formato de codificación universal que tiene muchas ventajas en relación con la mayoría de las otras codificaciones. Podemos usar el constructor unicode o el método str.decode con el códec para convertir el str a 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 métodos se convierten al tipo Unicode, y lo mismo que el unicode_literal.

Mejor práctica, use Unicode

Se recomienda trabajar siempre con texto en Unicode .

El software solo debería funcionar con cadenas Unicode internamente, convirtiéndose a una codificación particular en el resultado.

Puede codificar de nuevo cuando sea necesario

Sin embargo, para volver a poner la letra minúscula en tipo str , codifique la cadena de python a utf-8 nuevamente:

>>> 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')
километр

Por lo tanto, en Python 2, Unicode puede codificar en cadenas Python, y las cadenas Python pueden decodificar en el tipo Unicode.




Además, puede sobrescribir algunas variables:

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

Si usa así:

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

Funcionará justo cuando se llame.




Si todo el texto está en mayúscula como "KILÓMETRO", y solo desea que el primer carácter esté en minúscula, haga

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

Pero para minúsculas toda la cadena, haz

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