3.3.6 Operaciones con «strings»
Combinar cadenas
Podemos combinar dos o más cadenas de texto utilizando el operador +:
Repetir cadenas
Podemos repetir dos o más cadenas de texto utilizando el operador *:
Obtener un carácter
Los «strings» están indexados y cada carácter tiene su propia posición. Para obtener un único carácter dentro de una cadena de texto es necesario especificar su índice dentro de corchetes […].
Figura 8: Indexado de una cadena de texto Veamos algunos ejemplos de acceso a caracteres:
Veamos algunos ejemplos de acceso a caracteres:
Truco: Nótese que existen tanto índices positivos como índices negativos para acceder a cada carácter de la cadena de texto. A priori puede parecer redundante, pero es muy útil en determinados casos.
En caso de que intentemos acceder a un índice que no existe, obtendremos un error por fuera de rango:
Las cadenas de texto son tipos de datos inmutables. Es por ello que no podemos modificar un carácter directamente:
Truco: Existen formas de modificar una cadena de texto que veremos más adelante, aunque realmente no estemos transformando el original sino creando un nuevo objeto con las modificaciones.
Trocear una cadena
Es posible extraer «trozos» («rebanadas») de una cadena de texto2. Tenemos varias aproximaciones para ello:
[:] Extrae la secuencia entera desde el comienzo hasta el final. Es una especia de copia de toda la cadena de texto.
[start:] Extrae desde start hasta el final de la cadena.
[:end] Extrae desde el comienzo de la cadena hasta end menos 1.
[start:end] Extrae desde start hasta end menos 1.
[start:end:step] Extrae desde start hasta end menos 1 haciendo saltos de tamaño step.
Veamos la aplicación de cada uno de estos accesos a través de un ejemplo:
Longitud de una cadena
Para obtener la longitud de una cadena podemos hacer uso de len(), una función común a prácticamente todos los tipos y estructuras de datos en Python:
Pertenencia de un elemento
Si queremos comprobar que una determinada subcadena se encuentra en una cadena de texto utilizamos el operador in para ello. Se trata de una expresión que tiene como resultado un valor «booleano» verdadero o falso:
Habría que prestar atención al caso en el que intentamos descubrir si una subcadena no está en la cadena de texto:
Dividir una cadena
Una tarea muy común al trabajar con cadenas de texto es dividirlas por algún tipo de separador. En este sentido, Python nos ofrece la función split(), que debemos usar anteponiendo el «string» que queramos dividir:
Aunque aún no lo hemos visto, lo que devuelve split() es una lista (otro tipo de datos en Python) donde cada elemento es una parte de la cadena de texto original:
Ejercicio
Sabiendo que la longitud de una lista se calcula igual que la longitud de una cadena de texto, obtenga el número de palabras que contiene la siguiente cadena de texto:
Existe una forma algo más avanzada de dividir una cadena a través del particionado. Para ello podemos valernos de la función partition() que proporciona Python.
Esta función toma un argumento como separador, y divide la cadena de texto en 3 partes: lo que queda a la izquiera del separador, el separador en sí mismo y lo que queda a la derecha del separador:
Limpiar cadenas
Cuando leemos datos del usuario o de cualquier fuente externa de información, es bastante probable que se incluyan en esas cadenas de texto, caracteres de relleno aal comienzo y al final. Python nos ofrece la posibilidad de eliminar estos caracteres u otros que no nos interesen.
La función strip() se utiliza para eliminar caracteres del principio y del final de un «string». También existen variantes de esta función para aplicarla únicamente al comienzo o únicamente al final de la cadena de texto.
Supongamos que debemos procesar un fichero con números de serie de un determinado artículo. Cada línea contiene el valor que nos interesa pero se han «colado» ciertos caracteres de relleno que debemos limpiar:
A continuación vamos a hacer «limpieza» por la izquierda (comienzo) y por la derecha (final) utilizando la función lstrip() y rstrip() respectivamente:
Como habíamos comentado, también existe la posibilidad de especificar los caracteres que queremos borrar:
Importante: La función strip() no modifica la cadena que estamos usando (algo obvio porque los «strings» son inmutables) sino que devuelve una nueva cadena de texto con las modificaciones pertinentes.
Realizar búsquedas
Aunque hemos visto que la forma pitónica de saber si una subcadena se encuentra dentro de otra es a través del operador in, Python nos ofrece distintas alternativas para realizar búsquedas en cadenas de texto.
Vamos a partir de una variable que contiene un trozo de la canción Mediterráneo de Joan Manuel Serrat para ejemplificar las distintas opciones que tenemos:
Comprobar si una cadena de texto empieza o termina por alguna subcadena:
Encontrar la primera ocurrencia de alguna subcadena:
Tanto find() como index() devuelven el índice de la primera ocurrencia de la subcadena que estemos buscando, pero se diferencian en su comportamiento cuando la subcadena buscada no existe:
Contabilizar el número de veces que aparece una subcadena:
Dada la siguiente letra, obtenga la misma pero sustituyendo la palabra voices por sounds:
Utilice para ello únicamente búsqueda, concatenación y troceado de cadenas de texto.
Reemplazar elementos
Podemos usar la función replace() indicando la subcadena a reemplazar, la subcadena de reemplazo y cuántas instancias se deben reemplazar. Si no se especifica este último argumento, la sustitución se hará en todas las instancias encontradas:
Mayúsculas y minúsculas
Python nos permite realizar variaciones en los caracteres de una cadena de texto para pasarlos a mayúsculas y/o minúsculas. Veamos las distintas opciones disponibles:
Identificando caracteres
Hay veces que recibimos información textual de distintas fuentes de las que necesitamos identificar qué tipo de caracteres contienen. Para ello Python nos ofrece un grupo de funciones.
Veamos algunas de estas funciones:
Lista 8: Detectar si todos los caracteres son letras o números