Modificar Strings
Aprende a modificar strings en Python con concatenación, segmentos, métodos de mayúsculas, replace, strip, split, join y más. Incluye ejemplos ejecutables.
Los strings de Python son secuencias de caracteres encerrados entre comillas. Aunque los strings son inmutables — no puedes modificarlos en el lugar — Python te ofrece un rico conjunto de operadores y métodos que devuelven strings nuevos y modificados. Este capítulo cubre las técnicas más importantes: concatenación, repetición, conversión de mayúsculas, segmentos, reemplazo de subcadenas, eliminación de espacios en blanco, división y unión, y más.
Concepto Clave: Los Strings Son Inmutables
Antes de continuar, es importante entender que cada método de "modificación" devuelve un nuevo string. El string original nunca cambia.
greeting = "hello"
upper_greeting = greeting.upper()
print(greeting) # hello (unchanged)
print(upper_greeting) # HELLO (new string)Esto significa que debes asignar el resultado a una variable (o usarlo directamente) para conservar el cambio.
Concatenación de Strings
La concatenación combina dos o más strings en uno usando el operador +. Puedes encadenar tantos strings como necesites.
Concatenar strings en Python
Concatenar con Variables y Literales
Puedes mezclar variables de tipo string con literales de string:
first_name = "Ada"
last_name = "Lovelace"
full_name = first_name + " " + last_name
print(full_name) # Ada LovelacePara grandes cantidades de texto, considera usar format strings o f-strings, que son más fáciles de leer que largas cadenas de +.
Repetición de Strings
El operador * repite un string un número determinado de veces. Esto es útil para generar separadores, relleno o patrones simples.
Repetir un string en Python
Cambio de Mayúsculas y Minúsculas
Python proporciona varios métodos para cambiar las mayúsculas y minúsculas de un string.
| Método | Qué hace | Ejemplo de entrada → salida |
|---|---|---|
upper() | Todas las letras en mayúsculas | "hello" → "HELLO" |
lower() | Todas las letras en minúsculas | "HELLO" → "hello" |
title() | Primera letra de cada palabra en mayúscula | "hello world" → "Hello World" |
capitalize() | Primera letra en mayúscula, el resto en minúsculas | "hELLO" → "Hello" |
swapcase() | Intercambia mayúsculas↔minúsculas en cada letra | "Hello" → "hELLO" |
Convertir un string a mayúsculas o minúsculas en Python
Los métodos de mayúsculas se usan comúnmente para comparar la entrada del usuario sin importar cómo fue escrita:
answer = input("Type yes or no: ")
if answer.lower() == "yes":
print("You said yes!")Segmentos de Strings
Los segmentos extraen parte de un string usando la sintaxis [start:stop:step]. El resultado es un nuevo string que contiene los caracteres desde el índice start hasta, pero sin incluir, el índice stop.
H e l l o , W o r l d !
0 1 2 3 4 5 6 7 8 9 10 11 12
-13-12-11-10-9 -8 -7 -6 -5 -4 -3 -2 -1Extraer segmentos de strings en Python
Cuándo Usar Índices Negativos
Los índices negativos cuentan desde el final del string. El índice -1 es el último carácter, -2 es el penúltimo, y así sucesivamente. Esto es útil cuando quieres el final de un string sin conocer su longitud:
filename = "report_2024.csv"
extension = filename[-3:]
print(extension) # csvPara un estudio en profundidad, consulta el capítulo Slicing Strings.
Reemplazar Subcadenas
El método replace(old, new) devuelve una copia del string con cada ocurrencia de old reemplazada por new. Pasa un tercer argumento count para limitar cuántos reemplazos se realizan.
Reemplazar una parte de un string en Python
text = "I like cats. Cats are great. Cats!"
print(text.replace("Cats", "Dogs")) # replaces all occurrences
print(text.replace("Cats", "Dogs", 1)) # replaces first occurrence onlyI like cats. Dogs are great. Dogs!
I like cats. Dogs are great. Cats!Ten en cuenta que replace() distingue entre mayúsculas y minúsculas: "cats" y "Cats" se tratan como subcadenas diferentes.
Eliminar Espacios en Blanco
Los caracteres de espacio en blanco (espacios, tabulaciones, saltos de línea) al inicio o al final de un string a menudo deben eliminarse, especialmente al procesar entradas del usuario o leer archivos.
| Método | Elimina espacio en blanco de |
|---|---|
strip() | Ambos extremos |
lstrip() | Solo el lado izquierdo (inicio) |
rstrip() | Solo el lado derecho (final) |
raw = " hello world "
print(repr(raw.strip())) # 'hello world'
print(repr(raw.lstrip())) # 'hello world '
print(repr(raw.rstrip())) # ' hello world'También puedes eliminar caracteres específicos pasándolos como argumento:
path = "///usr/local/bin///"
print(path.strip("/")) # usr/local/binDivisión de Strings
El método split(sep) divide un string según un separador y devuelve una lista de subcadenas. Sin argumento, divide por cualquier espacio en blanco y elimina los strings vacíos.
sentence = "Python is easy to learn"
words = sentence.split()
print(words) # ['Python', 'is', 'easy', 'to', 'learn']
csv_row = "Alice,30,Engineer"
fields = csv_row.split(",")
print(fields) # ['Alice', '30', 'Engineer']Pasa un segundo argumento maxsplit para limitar el número de divisiones:
data = "one:two:three:four"
print(data.split(":", 2)) # ['one', 'two', 'three:four']Unión de Strings
join() es el inverso de split(). Combina una lista de strings en uno, colocando un separador entre cada elemento. El separador es el string sobre el que llamas a join().
words = ["Python", "is", "fun"]
sentence = " ".join(words)
print(sentence) # Python is fun
path_parts = ["usr", "local", "bin"]
path = "/".join(path_parts)
print(path) # usr/local/binUsar join() es mucho más eficiente que concatenar strings en un bucle, porque cada + crea un nuevo objeto string. join() asigna el string final solo una vez.
Búsqueda Dentro de Strings
Varios métodos te ayudan a encontrar texto dentro de un string.
find() y index()
find(sub) devuelve el índice de la primera ocurrencia de sub, o -1 si no se encuentra. index(sub) hace lo mismo pero lanza ValueError en lugar de devolver -1.
text = "the quick brown fox"
print(text.find("quick")) # 4
print(text.find("slow")) # -1
print(text.index("brown")) # 10startswith() y endswith()
Estos devuelven True o False y son una alternativa más limpia al uso de segmentos cuando necesitas verificar el inicio o el final de un string.
url = "https://www.w3docs.com"
print(url.startswith("https")) # True
print(url.endswith(".com")) # True
print(url.startswith("http://")) # FalsePuedes pasar una tupla de prefijos/sufijos para comprobar varias opciones a la vez:
filename = "photo.jpg"
print(filename.endswith((".jpg", ".jpeg", ".png"))) # Truecount()
count(sub) devuelve cuántas veces aparece sub en el string (sin solapamientos).
text = "banana"
print(text.count("a")) # 3
print(text.count("an")) # 2Comprobación de Propiedades de Strings
Python tiene una familia de métodos is* que devuelven True o False sobre el contenido de un string.
print("hello".isalpha()) # True – all alphabetic
print("hello123".isalnum()) # True – all alphanumeric
print("12345".isdigit()) # True – all digits
print(" ".isspace()) # True – all whitespace
print("Hello World".istitle()) # True – title-caseEstos son especialmente útiles para la validación de entrada.
Ejemplo Práctico: Limpiar la Entrada del Usuario
La modificación de strings en el mundo real suele combinar varias técnicas:
raw_input = " Ada Lovelace "
# Clean and normalise
name = raw_input.strip() # remove surrounding spaces
name = name.title() # ensure proper capitalisation
parts = name.split() # split into first / last
first, last = parts[0], parts[1]
print(f"First: {first}, Last: {last}") # First: Ada, Last: LovelaceReferencia Rápida
| Operación | Sintaxis | Devuelve |
|---|---|---|
| Concatenar | a + b | Nuevo string |
| Repetir | s * n | Nuevo string |
| Mayúsculas | s.upper() | Nuevo string |
| Minúsculas | s.lower() | Nuevo string |
| Título | s.title() | Nuevo string |
| Segmento | s[start:stop:step] | Nuevo string |
| Reemplazar | s.replace(old, new) | Nuevo string |
| Eliminar espacios | s.strip() | Nuevo string |
| Dividir | s.split(sep) | Lista |
| Unir | sep.join(iterable) | Nuevo string |
| Buscar | s.find(sub) | Índice entero o -1 |
| Contar | s.count(sub) | Entero |
| Empieza con | s.startswith(prefix) | Boolean |
| Termina con | s.endswith(suffix) | Boolean |
Para la lista completa de métodos de string incorporados, consulta String Methods. Para aprender sobre secuencias de escape como \n y \t, consulta Escape Characters. Para la búsqueda y manipulación de texto avanzada mediante patrones, consulta Python Regex.