separar - reemplazar caracteres en python
¿Cómo minúsculas una cadena en Python? (6)
¿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 mayúsculas a minúsculas?
Ej. Kilómetros -> kilómetros
La forma canónica de 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
Python 3 maneja Unicode como cadenas regulares:
>>> string = ''Километр''
>>> string
''Километр''
>>> string.lower()
''километр''
Unicode Python 2
Pero Python 2 no lo hace, pegado en un shell, codifica el literal como una cadena de bytes, usando utf-8
.
Y lower
no asigna ningún cambio que los objetos Unicode nativos conocerían, 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 codificación, ya que la codificación deseada sería ambigua. Para más sobre eso, vea el Cómo hacer con Unicode en los docs y PEP 263
Usa literales Unicode, no literales str
Entonces, necesitamos una cadena unicode
para manejar esta conversión, que se logra 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 advantages relación con la mayoría de las demás codificaciones. Podemos usar el constructor unicode
o el método str.decode
con el códec para convertir el str
en 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 codificación 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.
¿Hay una manera de convertir una cadena de mayúsculas, o incluso de mayúsculas a minúsculas?
Ej. Kilómetros -> kilómetros.
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.
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()
километр
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
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.
s = "Kilometer"
print(s.lower())
La documentación oficial es str.lower()
.