¿Cómo minúsculo una cadena en Python?

¿Hay una manera de convertir una cadena de mayúsculas, o incluso de mayúsculas a minúsculas?

Por ejemplo, “Kilómetros” → “kilómetros”.

Use .lower() – Por ejemplo:

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

La documentación oficial de 2.x está aquí: str.lower()
La documentación oficial de 3.x está aquí: str.lower()

Con Python 2, esto no funciona para las palabras que no están 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() километр 

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

¿Hay alguna forma de convertir una cadena completa ingresada por el usuario de mayúsculas o incluso mayúsculas a minúsculas?

Ej. Kilómetros -> kilómetros

La forma pirónica canónica de hacer esto es

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

Sin embargo, si el propósito es hacer una coincidencia que no distinga mayúsculas de minúsculas, debe usar el plegado de la caja:

 >>> 'Kilometers'.casefold() 'kilometers' 

Este es el por qué:

 >>> "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 es un método str en Python 3, pero en Python 2, querrá ver PyICU o py2casefold; varias respuestas abordan esto aquí .

Unicode Python 3

Python 3 maneja los literales de cadena simple como Unicode:

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

Python 2, los literales de cadena plana son bytes.

En Python 2, el siguiente, pegado en un shell, codifica el literal como una cadena de bytes, usando utf-8 .

Y lower no asigna ningún cambio que los bytes estén conscientes, 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 los scripts, Python se opondrá a que los bytes que no son ascii (a partir de Python 2.5 y Python 2.4) estén en una cadena sin encoding, ya que la encoding deseada sería ambigua. Para más sobre eso, vea el Cómo hacer con Unicode en los documentos y PEP 263

Usa literales Unicode, no literales str

Así que necesitamos una cadena unicode para manejar esta conversión, que se realiza fácilmente con una cadena literal Unicode, que se desmarca con un prefijo u (y tenga en cuenta que el prefijo u también funciona en Python 3):

 >>> 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 encoding universal que tiene muchas ventajas en relación con la mayoría de las demás codificaciones. Podemos usar el constructor de unicode o el método str.decode con el códec para convertir la 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 unicode_literal.

Mejores Prácticas, use Unicode

Se recomienda que siempre trabaje con texto en Unicode .

El software solo debería funcionar con cadenas Unicode internamente, convirtiéndose a una encoding particular en la salida.

Puede codificar de nuevo cuando sea necesario

Sin embargo, para volver a escribir la minúscula en el tipo str , codifique la cadena python utf-8 nuevo a 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') километр 

Así que en Python 2, Unicode puede codificar en cadenas de Python, y las cadenas de Python pueden decodificarse en el tipo Unicode.

Puede hacer lo que Peter dijo , o si desea que el usuario ingrese algo, puede hacer el siguiente código:

 raw_input('Type Something').lower() 

Luego convertirá automáticamente la cadena que escribieron en minúsculas.

Nota: se cambió el nombre de raw_input a input en Python 3.xy superior.

Además, puedes sobrescribir algunas variables:

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

Si lo usas así:

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

Funcionará justo cuando se llama.

No intentes esto, totalmente desaconsejable, no hagas esto:

 import string s='ABCD' print(''.join([string.ascii_lowercase[string.ascii_uppercase.index(i)] for i in s])) 

Salida:

 abcd 

Como nadie lo escribió aún, puedes usar swapcase (así que las letras mayúsculas se convertirán en minúsculas, y viceversa) (y esta debes usarla en los casos en los que acabo de mencionar (convertir de arriba a abajo, de abajo a arriba)):

 s='ABCD' print(s.swapcase()) 

Salida:

 abcd