Manipulación de Cadenas (Strings) en Python

PythonBeginner
Practicar Ahora

Introducción

En este laboratorio, explorará las técnicas fundamentales para manipular cadenas (strings) en Python. Las cadenas son uno de los tipos de datos más comunes, y saber cómo trabajar con ellas de manera efectiva es una habilidad crucial para cualquier programador de Python. Cubriremos desde definiciones básicas, el uso de caracteres especiales y la creación de cadenas multilínea, hasta operaciones más avanzadas como acceder a subcadenas, verificar contenido, cambiar mayúsculas/minúsculas, buscar, dividir y formatear texto. Al finalizar este laboratorio, tendrá una base sólida para manejar datos de texto en sus programas de Python.

Caracteres de Escape y Cadenas Multilínea

En este paso, aprenderás a manejar caracteres especiales dentro de cadenas (strings), a crear cadenas que ignoran estos caracteres especiales y a definir cadenas que abarcan varias líneas.

Primero, exploremos los caracteres de escape (escape characters). Un carácter de escape es una barra invertida \ seguida de un carácter que deseas insertar. Por ejemplo, \n representa un salto de línea (newline), y \' representa una comilla simple.

Nota: Si no estás familiarizado con el uso de WebIDE (similar a VS Code), por favor, apréndelo primero en este laboratorio.

Abre el archivo main.py desde el explorador de archivos de la izquierda. Añade el siguiente código:

## Caracteres de escape: usa la barra invertida para insertar caracteres especiales
## \n = salto de línea, \' = comilla simple
print("Hello there!\nHow are you?\nI\'m doing fine.")

Ahora, ejecuta el script abriendo una terminal y ejecutando el comando a continuación. Puedes abrir una nueva terminal haciendo clic en el icono + en el panel de la terminal.

python3 main.py

Verás la salida con los saltos de línea y la comilla simple insertados correctamente.

Hello there!
How are you?
I'm doing fine.

A continuación, veamos las cadenas raw (raw strings). Una cadena raw, prefijada con una r, ignora todos los caracteres de escape e imprime cualquier barra invertida que aparezca en la cadena. Esto es particularmente útil para expresiones regulares o rutas de archivos.

Reemplaza el contenido de main.py con el siguiente código:

## Cadena raw (prefijo r): trata las barras invertidas como caracteres literales
print(r"Hello there!\nHow are you?\nI\'m doing fine.")

Ejecuta el script de nuevo:

python3 main.py

Observa cómo \n y \' ahora se tratan como caracteres literales en la salida.

Hello there!\nHow are you?\nI\'m doing fine.

Finalmente, puedes crear cadenas multilínea (multiline strings) usando comillas triples (""" o '''). Esta es una forma conveniente de definir cadenas que abarcan varias líneas, preservando el formato.

Reemplaza el contenido de main.py con este ejemplo:

print(
"""Dear Alice,

Eve's cat has been arrested for catnapping,
cat burglary, and extortion.

Sincerely,
Bob"""
)

Ejecuta el script:

python3 main.py

La salida será un mensaje formateado y multilínea.

Dear Alice,

Eve's cat has been arrested for catnapping,
cat burglary, and extortion.

Sincerely,
Bob

Indexación y Segmentación (Slicing) de Cadenas

En este paso, aprenderá a acceder a caracteres individuales y a extraer subcadenas utilizando la indexación y la segmentación.

Las cadenas en Python son secuencias, lo que significa que puede acceder a sus partes utilizando un índice. La indexación comienza en 0 para el primer carácter.

H   e   l   l   o       w   o   r   l   d    !
0   1   2   3   4   5   6   7   8   9   10   11

Borre el archivo main.py y agregue el siguiente código para definir una cadena:

spam = 'Hello world!'

Para acceder al primer carácter ('H'), utiliza el índice 0. Para acceder al quinto carácter ('o'), utiliza el índice 4. También puede usar índices negativos para contar desde el final de la cadena; -1 se refiere al último carácter.

Agregue estas sentencias print a main.py para ver la indexación en acción:

spam = 'Hello world!'

## String indexing: access characters by position (0-based)
print(spam[0])    ## Returns first character
print(spam[4])    ## Returns fifth character
print(spam[-1])   ## Returns last character

Ejecute el script:

python3 main.py

La salida mostrará los caracteres individuales a los que accedió.

H
o
!

La segmentación (Slicing) le permite extraer una porción de una cadena, llamada subcadena. La sintaxis es [inicio:fin], que extrae caracteres desde el índice inicio hasta, pero sin incluir, el índice fin.

Practiquemos la segmentación. Reemplace el contenido de main.py con el siguiente código. Exploraremos algunas formas diferentes de segmentar la cadena.

spam = 'Hello world!'

## String slicing: extract substring using [start:end] syntax
print(spam[0:5])    ## Returns characters from index 0 to 4
print(spam[:5])     ## Omitting start index defaults to 0
print(spam[6:])     ## Omitting end index defaults to the end of the string
print(spam[::-1])   ## A step of -1 reverses the string

Ejecute el script:

python3 main.py

Observe las diferentes subcadenas creadas por la segmentación.

Hello
Hello
world!
!dlrow olleH

Pertenencia y Métodos de Caso (Case Methods) de Cadenas

En este paso, aprenderá a verificar si una subcadena existe dentro de una cadena y cómo cambiar y validar el caso (mayúsculas/minúsculas) de una cadena.

Los operadores in y not in se utilizan para verificar la pertenencia de una subcadena. Devuelven un valor booleano: True o False.

Borre el archivo main.py y agregue el siguiente código para probar estos operadores. Tenga en cuenta que la comparación distingue entre mayúsculas y minúsculas (case-sensitive).

## The 'in' and 'not in' operators
print('Hello' in 'Hello World')
print('HELLO' in 'Hello World')
print('cats' not in 'cats and dogs')

Ejecute el script para ver los resultados booleanos:

python3 main.py
True
False
False

Python también proporciona varios métodos para cambiar el caso de una cadena. Los métodos upper(), lower() y title() devuelven una nueva cadena completamente en mayúsculas, completamente en minúsculas o en formato de título (donde cada palabra comienza con mayúscula), respectivamente.

Reemplace el contenido de main.py con lo siguiente:

greet = 'Hello world!'
print(greet.upper())
print(greet.lower())
print(greet.title())

Ejecute el script:

python3 main.py

Verá las cadenas transformadas.

HELLO WORLD!
hello world!
Hello World!

Para verificar si una cadena ya está en un caso específico, puede usar los métodos isupper() y islower(). Estos métodos devuelven True si todos los caracteres con distinción de caso en la cadena están en el caso especificado y hay al menos un carácter con distinción de caso.

Reemplace el contenido de main.py con estos ejemplos:

spam = 'Hello world!'
print(spam.islower())

print('HELLO'.isupper())

## This is true because non-letter characters are ignored
print('abc12345'.islower())

## This is false because there are no cased characters
print('12345'.islower())

Ejecute el script para verificar el caso de cada cadena.

python3 main.py
False
True
True
False

Búsqueda y División (Splitting) de Cadenas

En este paso, aprenderá a verificar si una cadena comienza o termina con una subcadena específica, cómo unir una lista de cadenas en una sola cadena y cómo dividir una cadena en una lista de subcadenas.

Los métodos startswith() y endswith() son útiles para verificar el principio o el final de una cadena. Devuelven True o False.

Borre main.py y agregue el siguiente código:

print('Hello world!'.startswith('Hello'))
print('Hello world!'.endswith('world!'))
print('abc123'.startswith('abcdef'))

Ejecute el script para ver los resultados:

python3 main.py
True
True
False

El método join() se llama sobre una cadena separadora y toma un iterable (como una lista) como argumento. Combina los elementos del iterable en una sola cadena, colocando el separador entre cada elemento.

Reemplace el contenido de main.py con estos ejemplos para ver cómo funciona join():

## Join with a comma and space separator
print(', '.join(['cats', 'rats', 'bats']))

## Join with a space separator
print(' '.join(['My', 'name', 'is', 'Simon']))

Ejecute el script:

python3 main.py
cats, rats, bats
My name is Simon

El método split() hace lo contrario que join(). Se llama sobre una cadena y la divide en una lista de subcadenas. Por defecto, divide por espacios en blanco (whitespace), pero puede proporcionar un delimitador específico.

Reemplace el contenido de main.py con el siguiente código para practicar la división de cadenas:

## Split by default whitespace
print('My name is Simon'.split())

## Split by a specific delimiter 'ABC'
print('MyABCnameABCisABCSimon'.split('ABC'))

Ejecute el script para ver las listas resultantes:

python3 main.py
['My', 'name', 'is', 'Simon']
['My', 'name', 'is', 'Simon']

Justificación y Limpieza de Cadenas

En este paso, aprenderá a formatear la alineación del texto y cómo eliminar caracteres no deseados, como espacios en blanco, del principio o del final de una cadena.

Python proporciona métodos para justificar texto dentro de un ancho dado: rjust() (justificar a la derecha), ljust() (justificar a la izquierda) y center() (centrar). Estos métodos devuelven una nueva cadena con relleno (padding).

Borre el archivo main.py y agregue el siguiente código:

print('Hello'.rjust(10))
print('Hello'.ljust(10))
print('Hello'.center(20))

Ejecute el script para ver el texto alineado. Las comillas simples en la salida ayudan a visualizar el relleno.

python3 main.py
     Hello
Hello
       Hello

También puede proporcionar un segundo argumento opcional para especificar un carácter de relleno diferente al espacio. Reemplace el contenido de main.py con esto:

print('Hello'.rjust(20, '*'))
print('Hello'.center(20, '='))

Ejecute el script nuevamente:

python3 main.py
***************Hello
=======Hello========

Para limpiar cadenas, puede usar los métodos strip(), rstrip() y lstrip(). Estos se utilizan para eliminar caracteres de los extremos de una cadena. Por defecto, eliminan los caracteres de espacio en blanco (espacios, tabulaciones, saltos de línea).

Reemplace el contenido de main.py con este ejemplo:

spam = '    Hello World     '
print(spam.strip())   ## Removes from both ends
print(spam.lstrip())  ## Removes from the left side
print(spam.rstrip())  ## Removes from the right side

Ejecute el script para ver las cadenas limpias:

python3 main.py
Hello World
Hello World
    Hello World

También puede pasar un argumento de cadena a estos métodos para especificar qué caracteres eliminar. El método eliminará todos los caracteres del argumento que se encuentren en los extremos de la cadena.

Reemplace el contenido de main.py por última vez:

spam = 'SpamSpamBaconSpamEggsSpamSpam'
## Removes all characters 'S', 'p', 'a', 'm' from the ends
print(spam.strip('ampS'))

Ejecute el script:

python3 main.py

La salida muestra que las partes externas de "Spam" han sido eliminadas, dejando la parte central de la cadena.

BaconSpamEggs

Resumen

En este laboratorio, ha dominado las técnicas esenciales para la manipulación de cadenas (string manipulation) en Python. Aprendió a usar caracteres de escape y a crear cadenas multilínea para una mejor representación del texto. Practicó el acceso a partes de una cadena utilizando indexación (indexing) y segmentación (slicing). También exploró potentes métodos de cadena para verificar la pertenencia (in, not in), cambiar mayúsculas/minúsculas (upper(), lower()), validar mayúsculas/minúsculas (isupper(), islower()), búsqueda (startswith(), endswith()), unión y división, y finalmente, formateo y limpieza de texto (rjust(), strip()). Estas habilidades son fundamentales para cualquier tarea que implique el procesamiento de texto en Python.