Strings en Python
Table of Contents
ToggleIntroducción
Este lenguaje, desde sus inicios, fue creado para desarrollar scripts (programas para automatización de tareas). Sin embargo, y con el paso del tiempo, se convirtió en un lenguaje de programación multipropósito. Por tal motivo, tiene incorporado todo un conjunto de características que lo hacen ideal para que el usuario haga uso de strings en Python. Por ejemplo, muchas de las herramientas de varios sistemas operativos basados basados en Unix, como LINUX por ejemplo, están escritas en Python, razón por la cual, las distribuciones suelen contener uno o dos intérpretes del lenguaje.
Al realizar tareas de strings en Python, como scripts, trabajaremos todo el tiempo con cadenas de caracteres.
Conceptos básicos
Trabajo básico con strings en python puede ser buscar un caracter, una palabra, frase en una cadena, eliminar caracteres innecesarios, reemplazar unos caracteres por otros, etc. Las cadenas de Python proveen de forma estándar varios métodos (funciones propias del objeto) para realizar este tipo de operaciones.
Primero, debemos tener en cuenta que las cadenas en Python funcionan como las colecciones, en donde cada uno de los elementos es un caracter que se puede ubicar por un índice. De modo que las operaciones de «Sclicing» y acceso a elementos a través de índices funciona sin diferencias respecto de las listas y tuplas. Hagamos algunas pruebas:
Por lo tanto, podemos sacar la siguiente conclusión:
¿Se puede recorrer con un for? ¡Por supuesto!
texto = “Python”
for n in texto:
print(n)
Out:
P
y
t
h
o
n
De igual modo podemos concatenar:
nombre = «Mark»
apellido = «Alderson»
nombre + » » + apellido
Out:
‘Mark Alderson’
Como también la concatenación múltiple (copias):
saludo = «XD»
saludo*3
Out:
‘XDXDXD’
Recordemos que las cadenas son inmutables. Por tanto, una vez creadas no pueden modificarse. En efecto, si intentamos modificar una cadena el intérprete nos indica que a ésta no se pueden asignar elementos.
Más adelante, veremos cómo solucionamos esta dificultad.
Caracteres especiales
Los caracteres especiales, como el de salto de línea (\n) o tabulación (\t), son difíciles de detectar al imprimir una cadena puesto que, no se imprimen literalmente, sino que toman alguna forma en particular. Es decir, el caracter \n se traduce como nueva línea y el caracter \t como un segmento vacío de longitud equivalente al de cuatro espacios.
Por ejemplo, este código:
Para evitar que los caracteres especiales sean “traducidos” a su representación correspondiente, Python nos provee la función repr(). La cual, imprime en pantalla los caracteres de forma literal:
Esto es especialmente útil cuando obtenemos información de un archivo o alguna otra fuente similar y debemos trabajar con la cadena literal.
Métodos de los strings en Python
Las cadenas, nos proporcionan métodos que nos facilitan su manipulación. A continuación veremos algunos ejemplos de estos:
start() y endwith()
Por ejemplo, una tarea bastante común, es la de querer determinar si una cadena comienza o termina con determinados caracteres. Para esto tenemos los métodos startswith() y endswith() que retornan un booleano.
Otra operación bastante común es la de querer eliminar los espacios iniciales y finales de una cadena. Por ejemplo, si le solicitamos el nombre a un usuario a través de la consola (vía la función input()) y accidentalmente ingresa un espacio al final antes de presionar la tecla Enter. En ese caso tendríamos una cadena como la siguiente:
nombre = «Juan «
nombre.strip()
Out:
‘Juan’
strip()
Este método nos puede ser útil para quitar caracteres especiales del principio o del final de un str.
dato = «\t\nHola\nChau»
print(dato.strip())
Out:
Hola
Chau
Se ha eliminado el \t\n del principio, pero no manipulo el \n del medio. Si hubiera estado al final, lo habría borrado también. Esto es especialmente útil al trabajar con los archivos de texto (txt), pudiendo eliminar el salto de línea al leer renglones.
replace()
Para reemplazar un conjunto de caracteres por otro tenemos a disposición la función replace().
frase = «¡El color rojo es más lindo que el azul!”
frase.replace(«rojo»,»verde»)
print(frase)
Out:
‘¡El color verde es más lindo que el azul!’
El primer argumento corresponde a la cadena buscada y el segundo, a la cadena que se quiere poner en su lugar. Esto ocurre para todas las apariciones del primer argumento en la cadena original. Por tanto, Este método retorna una nueva cadena con el reemplazo correspondiente. Sin embargo, NO modifica la cadena original. Si quisiéramos modificar la original se debería de hacer lo siguiente:
Veamos otro ejemplo:
cadena = «separado»
reemplazo = cadena.replace(«», «,»)
print(reemplazo)
Out:
,s,e,p,a,r,a,d,o,
En el caso de querer eliminar la primer y última coma haríamos lo siguiente:
cadena = «separado»
reemplazo = cadena.replace(«», «,»)
print(reemplazo[1:16])
Out:
s,e,p,a,r,a,d,o
split()
Este método lo utilizamos cuando queremos cortar una cadena en función de un delimitador (como una coma o un espacio vacío), el cual, retorna una lista.
nombres = «Esteban Julio Ricardo»
nombres.split()
Out:
[‘Esteban’, ‘Julio’, ‘Ricardo’]
Si lo utilizamos sin argumento, se usa por defecto el caracter espacio vacío como separador. Ahora bien, si deseamos usar otro delimitador podemos pasarlo como parámetro:
datos = «Jugador,Nro10,Seleccion»
datos.split(«,»)
Out:
[‘Jugador’, ‘Nro10’, ‘Seleccion’]
Al finalizar los elementos de la lista resultante no contienen el delimitador. Si el delimitador no es encontrado en la cadena, el resultado es una lista de un solo elemento.
count()
Este método retorna el número de veces que se repite un conjunto de caracteres especificado:
frase = «Ellos eran personas muy, muy, muy sabias…»
frase.count(«muy»)
Out:
3
find()
El método find(), toma como argumento una cadena y retorna la posición, en la que se encuentra dentro de la cadena, desde donde fue invocada la función. Sino, retorna -1 en caso de no ser encontrada. Por ejemplo:
frase = «Cosechas lo que siembras»
frase.find(«lo»)
Out:
9
frase.find(«jugador»)
Out:
-1
upper y lower()
Estas funciones convierten los caracteres de la cadena a mayúsculas y minúsculas, respectivamente. Por ejmplo:
frase = «Hola Mundo!»
saludo.upper()
Out:
‘HOLA MUNDO!’
saludo.lower()
Out:
‘hola mundo!’
Otros métodos
str.isdecimal():
Devuelve True si todos los caracteres de la cadena son decimales y si hay al menos un caracter. False en caso contrario. Los caracteres decimales son aquellos que se pueden usar para formar números en base 10
str.swapcase():
Devuelve una copia de la cadena con caracteres en mayúscula convertidos a minúsculas y viceversa.
str.title():
Devuelve una versión en formato título. Las palabras comienzan con un caracter en mayúscula y el resto de caracteres en minúsculas.
str.capitalize():
Devuelve una copia de la cadena con su primer carácter en mayúscula y el resto en minúsculas.
Veamos algunos ejemplos:
Como podemos ver, tenemos cadena1 y cadena2 y los diferentes métodos de prueba:
Formar cadenas
Es bastante usual que los strings en Python tengan que incluir otros tipos de datos dentro de una cadena. Es decir, podemos usar la función str() y poder concatenar otros tipos de datos. Pero cuando debemos hacerlo con una gran cantidad de datos, sobre otro string, nos resultará conveniente utilizar el método format().
En el código creamos una cadena, en donde queremos incluir las variables nombre y edad (una cadena y un entero, respectivamente). En su lugar, colocamos {0} y {1} (y así sucesivamente en relación con la cantidad de objetos que queramos incluir) y por último llamamos a .format() pasándole como argumentos los elementos que queremos insertar dentro de mensaje.
Recordemos que los strings en Python son objetos inmutables, por lo que .format() retorna una nueva cadena con los valores reemplazados. Desde la llegada de la versión 3.6 Python introduce una manera más legible, que consiste en poner nombres de variables entre llaves dentro de una cadena y anteponiendo la letra f.
nombre = «Esteban»
edad = 18
mensaje = «¡Hola!, mi nombre es {} y tengo {} años.».format(nombre,edad)
print(mensaje)
Out:
¡Hola!, mi nombre es Esteban y tengo 18 años.
El lenguaje también soporta un sistema más antiguo proveniente del lenguaje C a través del operador %.
nombre = «Esteban»
edad = 18
mensaje = «¡Hola! mi nombre es %s y tengo %d años.» % (nombre, edad)
print(mensaje)
Out:
¡Hola! mi nombre es Pablo y tengo 30 años.
Y más simple todavía, con la variable en su posición correspondiente.:
nombre = «Esteban»
edad = 18
mensaje = f»¡Hola!, mi nombre es {nombre} y tengo {edad} años.»
print(mensaje)
Out:
¡Hola! mi nombre es Esteban y tengo 18 años.