¿Cómo pongo en minúsculas una cadena en Python?

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

Por ejemplo, "Kilómetros" → "kilómetros".

preguntado el 23 de julio de 11 a las 00:07

6 Respuestas

Utilice la herramienta .lower() - Por ejemplo:

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

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

Respondido 13 Feb 19, 16:02

Esto solo funciona bien con caracteres ASCII, es posible que desee utilizar str.maketrans e str.translate si no obtiene la cadena esperada. - Ekrem Dinçel

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

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

Por ejemplo, kilómetros -> kilómetros

La forma canónica Pythonic de hacer esto es

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

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

>>> '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á mirar PyICU o py2casefold - varias respuestas abordan esto aquí.

Unicode Python 3

3 Python maneja literales de cadena simple como unicode:

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

Python 2, los literales de cadena simple son bytes

En Python 2, lo 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 conozcan, 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 no ascii (a partir de Python 2.5 y advertencia en Python 2.4) estén en una cadena sin codificación dada, ya que la codificación deseada sería ambigua. Para obtener más información al respecto, consulte los procedimientos de Unicode en el documentos e PEPE 263

Utilice literales Unicode, no str literales

Entonces necesitamos un unicode string para manejar esta conversión, que se logra fácilmente con un literal de cadena Unicode, que elimina la ambigüedad con un u prefijo (y tenga en cuenta el u El prefijo también funciona en Python 3):

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

Tenga en cuenta que los bytes son completamente diferentes de los str bytes - el carácter de escape es '\u' seguido del ancho de 2 bytes o la representación de 16 bits de estos 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'

Ahora bien, 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 muchos ventajas en relación con la mayoría de las otras codificaciones. Podemos usar el unicode constructor o str.decode método 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 unicode_literal.

Práctica recomendada, utilice Unicode

Se recomienda que siempre trabajar con texto en Unicode.

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

Puede volver a codificar cuando sea necesario

Sin embargo, para volver a escribir las minúsculas str, codifica la cadena de Python para utf-8 nuevo:

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

Entonces, en Python 2, Unicode puede codificar en cadenas de Python y las cadenas de Python pueden decodificar en el tipo Unicode.

Respondido el 20 de junio de 20 a las 10:06

Tengo una nota que no se aplica necesariamente a la pregunta del OP, pero que es importante con la portabilidad (internacionalización) cuando se realizan coincidencias que no distinguen entre mayúsculas y minúsculas. Con la coincidencia que no distingue entre mayúsculas y minúsculas, los signos diacríticos (acentos) pueden convertirse en una preocupación. Ejemplo: >>> "raison d'être".casefold(); "raison d'être" Ve a esta respuesta Sobre Nosotros unidecode - bballdave025

Con Python 2, esto no funciona para palabras que no están en inglés en UTF-8. En este caso decode('utf-8') puede ayudar a:

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

Respondido 21 Abr '18, 12:04

Quizás deberíamos ser un poco más explícitos al decir que el decode('utf-8') no solo es innecesario en Python 3, sino que provoca un error. (ref.) Ejemplo: $python3; >>>s='Километр'; >>>print (s.lower); #result: километр >>>s.decode('utf-8').lower(); #result: ...AttributeError: 'str' object has no attribute 'decode' Podemos ver una segunda forma de hacer esto, haciendo referencia a la excelente respuesta de @AaronHall. >>>s.casefold() #result: километр - bballdave025

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á solo cuando se llame.

Respondido 08 Oct 17, 08:10

La pregunta es cómo transformar la cadena en minúsculas. ¿Cómo esta respuesta obtuvo tantos votos a favor? - Munim Munna

s=s.lower() es el camino a seguir. - m00lti

@ m00lti Por qué s? ¿Qué tiene que ver el nombre de la variable con la pregunta? - Ekrem Dinçel

@ EkremDinçel es como una cuerda, creo. - ergo

No intentes esto, no lo recomiendo totalmente, 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 ha escrito todavía, puedes usar swapcase (por lo que las letras mayúsculas se convertirán en minúsculas, y viceversa) (y esta debe usar en los casos en los que acabo de mencionar (convertir de mayúscula a inferior, de inferior a superior)):

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

Salida:

abcd

respondido 07 nov., 18:05

La forma más sencilla de hacerlo es:

i = "Kilometers"
print(i.lower())

Respondido 09 Abr '21, 15:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.