¿Hay alguna manera de convertir una cadena de mayúsculas, o incluso parte de mayúsculas a minúsculas?
Por ejemplo, "Kilómetros" → "kilómetros".
Uso .lower()
- Por ejemplo:
s = "Kilometer"
print(s.lower())
La documentación oficial 2.x está aquí:
La documentación oficial 3.x está aquí:str.lower()
str.lower()
¿Cómo convertir cadenas a minúsculas en Python?
¿Hay alguna forma de convertir una cadena completa introducida por el usuario de mayúsculas, o incluso parte de mayúsculas a minúsculas?
Ej. Kilómetros -> kilómetros
La forma canónica pitónica de hacer esto es
>>> 'Kilometers'.lower()
'kilometers'
Sin embargo, si el propósito es hacer una coincidencia entre mayúsculas y minúsculas, debe usar 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á ver PyICU o py2casefold; varias respuestas abordan esto aquí .
Python 3 maneja literales de cadena simple como unicode:
>>> string = 'Километр'
>>> string
'Километр'
>>> string.lower()
'километр'
En Python 2, el siguiente, pegado en un shell, codifica el literal como una cadena de bytes, utilizando 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 objetará 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, ya que la codificación prevista sería ambigua. Para obtener más información al respecto, consulte el tutorial sobre Unicode en los documentos y PEP 263
str
literalesPor lo tanto, necesitamos una unicode
cadena para manejar esta conversión, que se logra fácilmente con un literal de cadena unicode, que se desambigua con un u
prefijo (y tenga en cuenta que el u
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: al carácter de escape le '\u'
sigue el ancho de 2 bytes o la representación de 16 bits de estas 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, si solo lo tenemos en forma de a 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 unicode
constructor o el str.decode
método con el códec para convertirlo 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.
Se recomienda que siempre trabaje con texto en Unicode .
El software solo debería funcionar con cadenas Unicode internamente, convirtiéndose a una codificación particular en la salida.
Sin embargo, para volver a escribir en minúsculas str
, codifique la cadena de Python 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')
километр
Entonces, en Python 2, Unicode puede codificar en cadenas de Python, y las cadenas de Python pueden decodificar en el tipo Unicode.
>>> "raison d'être".casefold(); "raison d'être"
Vea esta respuesta sobreunidecode
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:fuente
decode('utf-8')
no solo es innecesario en Python 3, sino que causa 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 hacerlo, haciendo referencia a la excelente respuesta de @AaronHall.>>>s.casefold() #result: километр
Además, puede sobrescribir algunas variables:
Si usas así:
Funcionará justo cuando se le llame.
fuente
s=s.lower()
Es el camino a seguir.No intentes esto, no lo recomiendo totalmente, no hagas esto:
Salida:
Dado que nadie lo escribió todavía, puede usarlo
swapcase
(por lo que las letras mayúsculas se convertirán en minúsculas y viceversa) (y este debe usarlo en los casos en que acabo de mencionar (convertir de superior a inferior, de inferior a superior)):Salida:
fuente