¿Cómo pongo en minúsculas una cadena en Python?
Frecuentes
Visto 2,699 equipos
6 Respuestas
3378
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
350
¿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
203
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
23
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
4
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
2
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 python string uppercase lowercase or haz tu propia pregunta.
Esto solo funciona bien con caracteres ASCII, es posible que desee utilizar
str.maketrans
estr.translate
si no obtiene la cadena esperada. - Ekrem Dinçel