Saltar al contenido
Editor

Todos los métodos de cadenas en Python explicados con ejemplos

Principiante25 min6 ejercicios100 XP

Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción

0/6 ejercicios

Las cadenas de Python vienen con una caja de herramientas de métodos integrados. Con ellos puedes cambiar entre mayúsculas y minúsculas, quitar espacios de sobra, buscar palabras, dividir el texto en partes y mucho más.

Piensa en los métodos de cadenas como en las aplicaciones de tu teléfono. Cada una hace un trabajo concreto. No necesitas memorizarlos todos ahora; basta con saber que existen para recurrir al adecuado cuando lo necesites.

En este tutorial aprenderás todos los métodos de cadenas importantes con ejemplos en vivo que puedes ejecutar y modificar. Al terminar, podrás limpiar, buscar, dividir y transformar cualquier texto que Python te ponga delante.

Cómo convertir cadenas a mayúsculas en Python

Python te ofrece cinco métodos para cambiar las mayúsculas y minúsculas de una cadena. Los dos más comunes son upper() y lower().

Los cinco métodos de mayúsculas y minúsculas
greeting = "hello, world!"
print(greeting.upper()) # HELLO, WORLD!
print(greeting.lower()) # hello, world!
print(greeting.title()) # Hello, World!
print(greeting.capitalize()) # Hello, world!
print(greeting.swapcase()) # HELLO, WORLD!
Salida
HELLO, WORLD!
hello, world!
Hello, World!
Hello, world!
HELLO, WORLD!

upper() convierte todas las letras a mayúsculas. lower() convierte todas las letras a minúsculas. Estos dos son los caballos de batalla que más vas a usar.

title() pone en mayúscula la primera letra de cada palabra, como en los títulos de libros en inglés. capitalize() solo pone en mayúscula la primera letra de toda la cadena y pasa el resto a minúsculas.

swapcase() invierte cada letra: las mayúsculas pasan a minúsculas y viceversa. No se usa mucho, pero resulta útil cuando hace falta.

Usos prácticos de los métodos de mayúsculas y minúsculas
# Real-world use: case-insensitive comparison
user_input = "Yes"
# Without lower(), "Yes" != "yes" and your check fails
if user_input.lower() == "yes":
print("User said yes!")
# title() is great for formatting names
full_name = "ada lovelace"
print(full_name.title()) # Ada Lovelace
Salida
User said yes!
Ada Lovelace

Cómo quitar los espacios en blanco de las cadenas en Python

Los espacios de sobra y los caracteres invisibles se cuelan en las cadenas todo el tiempo: en lo que escribe el usuario, al leer archivos o al copiar y pegar. La familia de strip() se encarga de esto a la perfección.

strip(), lstrip() y rstrip()
messy = " hello, world! "
print(repr(messy)) # ' hello, world! '
print(repr(messy.strip())) # 'hello, world!'
print(repr(messy.lstrip())) # 'hello, world! '
print(repr(messy.rstrip())) # ' hello, world!'
Salida
'   hello, world!   '
'hello, world!'
'hello, world!   '
'   hello, world!'

strip() quita los espacios en blanco de los dos extremos de una cadena. Es como cortar la corteza de los dos lados de un sándwich.

lstrip() solo recorta el lado izquierdo. rstrip() solo recorta el lado derecho. La "l" y la "r" vienen de left (izquierda) y right (derecha) en inglés.

En el ejemplo usamos repr() para que puedas ver los espacios. Normalmente, print() ocultaría los espacios del final.

Quitar caracteres concretos
# You can also strip specific characters
filename = "###report.txt###"
print(filename.strip("#")) # report.txt
url = "https://example.com/"
print(url.rstrip("/")) # https://example.com
Salida
report.txt
https://example.com

Cómo buscar dentro de una cadena en Python

Python te ofrece varias formas de buscar texto dentro de una cadena. Las más importantes son find(), count(), startswith() y endswith().

Cómo usar find() e index() en Python

find() te dice dónde aparece por primera vez una subcadena. Devuelve el índice (el número de posición) de la primera coincidencia, contando desde 0.

find() devuelve la posición de una subcadena
sentence = "I love Python programming"
print(sentence.find("Python")) # 7 (starts at position 7)
print(sentence.find("love")) # 2
print(sentence.find("Java")) # -1 (not found)
print(sentence.find("o")) # 3 (first occurrence)
print(sentence.find("o", 4)) # 13 (search starting from position 4)
Salida
7
2
-1
3
11

Cuando find() no encuentra la subcadena, devuelve -1. Es su forma de decir "no está".

index() hace el mismo trabajo que find(), pero con una diferencia clave: si no encuentra la subcadena, lanza un ValueError en lugar de devolver -1.

find(): devuelve -1 si no la encuentra
text = "hello world"
result = text.find("xyz")
print(result)  # -1 (safe, no crash)
index(): lanza un error si no la encuentra
text = "hello world"
# result = text.index("xyz")
# ValueError: substring not found

# Use index() only when you're SURE
# the substring exists
result = text.index("world")
print(result)  # 6

Cómo contar apariciones en una cadena con count()

count() te dice cuántas veces aparece una subcadena en la cadena. Distingue mayúsculas de minúsculas, así que "The" y "the" se cuentan por separado.

count() cuenta las apariciones de una subcadena
text = "the cat sat on the mat by the hat"
print(text.count("the")) # 3
print(text.count("at")) # 4 (cat, sat, mat, hat)
print(text.count("dog")) # 0
print(text.count("The")) # 0 (case-sensitive!)
Salida
3
4
0
0

Cómo comprobar cómo empieza y cómo termina una cadena en Python

startswith() y endswith() devuelven True o False. Son perfectos para comprobar extensiones de archivo, prefijos de URL o cualquier patrón en los extremos de una cadena.

startswith() y endswith()
filename = "report_2024.pdf"
print(filename.startswith("report")) # True
print(filename.endswith(".pdf")) # True
print(filename.endswith(".txt")) # False
# Check multiple options with a tuple
print(filename.endswith((".pdf", ".docx", ".txt"))) # True
Salida
True
True
False
True

Cómo reemplazar texto en una cadena de Python

replace() cambia cada aparición de una subcadena por otra. Es como la función de buscar y reemplazar de un procesador de textos.

replace() cambia unas subcadenas por otras
message = "I like cats. Cats are great. I have two cats."
# Replace all occurrences
print(message.replace("cats", "dogs"))
# I like dogs. Cats are great. I have two dogs.
# Notice "Cats" (capital C) was NOT replaced -- case matters!
# Limit replacements with the third argument
print(message.replace("cats", "dogs", 1))
# I like dogs. Cats are great. I have two cats.
Salida
I like dogs. Cats are great. I have two dogs.
I like dogs. Cats are great. I have two cats.

El tercer argumento es opcional. Limita cuántos reemplazos se hacen. Sin él, replace() cambia todas las coincidencias que encuentra.

Recuerda: replace() distingue mayúsculas de minúsculas. "cats" y "Cats" se tratan como subcadenas distintas.

Cómo dividir una cadena en Python

split() corta una cadena en una lista de cadenas más pequeñas. Por defecto, divide en cualquier espacio en blanco (espacios, tabuladores, saltos de línea).

split() divide cadenas en listas
sentence = "Python is easy to learn"
words = sentence.split()
print(words) # ['Python', 'is', 'easy', 'to', 'learn']
# Split on a specific character
csv_line = "Alice,25,New York,Engineer"
values = csv_line.split(",")
print(values) # ['Alice', '25', 'New York', 'Engineer']
# Split with a limit
first, rest = "John Smith Jr.".split(" ", 1)
print(first) # John
print(rest) # Smith Jr.
Salida
['Python', 'is', 'easy', 'to', 'learn']
['Alice', '25', 'New York', 'Engineer']
John
Smith Jr.

El primer argumento es el delimitador: el carácter (o la cadena) por donde se hace la división. El segundo argumento limita el número de divisiones.

rsplit() funciona igual, pero empieza a dividir por la derecha. Esto importa cuando usas un límite.

rsplit() divide desde la derecha
path = "home/user/documents/report.txt"
# split from the left
print(path.split("/", 1)) # ['home', 'user/documents/report.txt']
# rsplit from the right
print(path.rsplit("/", 1)) # ['home/user/documents', 'report.txt']
Salida
['home', 'user/documents/report.txt']
['home/user/documents', 'report.txt']

Cómo unir una lista en una cadena en Python

join() es lo contrario de split(). Toma una lista de cadenas y las pega con un separador. El separador es la cadena sobre la que llamas a join().

join() pega cadenas
words = ["Python", "is", "awesome"]
sentence = " ".join(words)
print(sentence) # Python is awesome
# Use any separator you want
print("-".join(words)) # Python-is-awesome
print(", ".join(words)) # Python, is, awesome
print("\n".join(words)) # Each word on its own line
Salida
Python is awesome
Python-is-awesome
Python, is, awesome
Python
is
awesome

Al principio la sintaxis parece estar al revés: separator.join(list). Léela así: "usa este separador para unir esa lista".

Un patrón común es dividir una cadena, modificar los trozos y volver a unirlos.

Dividir, modificar y volver a unir
# Capitalize every word manually
sentence = "python is easy to learn"
words = sentence.split()
capitalized = [word.upper() for word in words]
result = " ".join(capitalized)
print(result) # PYTHON IS EASY TO LEARN
# Build a CSV line from data
fields = ["Alice", "25", "New York"]
csv_line = ",".join(fields)
print(csv_line) # Alice,25,New York
Salida
PYTHON IS EASY TO LEARN
Alice,25,New York

Cómo comprobar el contenido de una cadena en Python

Python tiene una familia de métodos is____() que devuelven True o False según lo que contenga una cadena. Son ideales para validar lo que escribe el usuario.

isalpha(), isdigit(), isalnum() e isspace()
print("hello".isalpha()) # True (only letters)
print("hello1".isalpha()) # False (contains a digit)
print("12345".isdigit()) # True (only digits)
print("12.5".isdigit()) # False (dot is not a digit)
print("hello1".isalnum()) # True (letters and digits only)
print("hello!".isalnum()) # False (! is not alphanumeric)
print(" ".isspace()) # True (only whitespace)
print(" hi ".isspace()) # False (contains letters)
Salida
True
False
True
False
True
False
True
False

isalpha() comprueba que solo haya letras. isdigit() comprueba que solo haya dígitos. isalnum() comprueba que solo haya letras o dígitos (caracteres alfanuméricos). isspace() comprueba que solo haya espacios en blanco.

Todos estos métodos devuelven False con una cadena vacía. Una cadena vacía no tiene caracteres que comprobar, así que nada pasa la prueba.

Usar los métodos de comprobación para validar
# Practical example: validate a username
username = "player42"
if username.isalnum():
print(f"\"{username}\" is a valid username")
else:
print(f"\"{username}\" contains invalid characters")
# Check if user typed a number
user_input = "42"
if user_input.isdigit():
number = int(user_input)
print(f"You entered the number {number}")
else:
print("That's not a valid number")
Salida
"player42" is a valid username
You entered the number 42

Cómo rellenar y alinear cadenas en Python

A veces necesitas que un texto tenga un ancho determinado: para tablas, recibos o una salida ordenada en la terminal. Los métodos de relleno de Python añaden caracteres para llenar el hueco.

center(), ljust(), rjust() y zfill()
word = "hi"
print(word.center(10)) # " hi "
print(word.center(10, "-")) # "----hi----"
print(word.ljust(10, ".")) # "hi........"
print(word.rjust(10, ".")) # "........hi"
# zfill() pads with zeros on the left
print("42".zfill(5)) # 00042
print("7".zfill(3)) # 007
Salida
    hi    
----hi----
hi........
........hi
00042
007

center() centra la cadena dentro del ancho indicado. ljust() la alinea a la izquierda y rellena por la derecha. rjust() la alinea a la derecha y rellena por la izquierda.

zfill() es un atajo para rellenar números con ceros a la izquierda. Es perfecto para números de pedido, marcas de tiempo o nombres de archivo como image_007.png.

Crear una tabla con formato
# Build a neat table
print("Item".ljust(15) + "Price".rjust(8))
print("-" * 23)
print("Coffee".ljust(15) + "$4.50".rjust(8))
print("Sandwich".ljust(15) + "$8.99".rjust(8))
print("Cookie".ljust(15) + "$2.25".rjust(8))
print("-" * 23)
print("Total".ljust(15) + "$15.74".rjust(8))
Salida
Item              Price
-----------------------
Coffee            $4.50
Sandwich          $8.99
Cookie            $2.25
-----------------------
Total            $15.74

Cómo encadenar métodos de cadenas en Python

Como cada método de cadena devuelve una cadena nueva, puedes llamar a otro método sobre el resultado. Esto se llama encadenamiento de métodos (method chaining).

Encadenar métodos
user_input = " Hello, World! "
# Chain multiple methods together
cleaned = user_input.strip().lower().replace(",", "")
print(cleaned) # hello world!
# Same thing step by step:
step1 = user_input.strip() # "Hello, World!"
step2 = step1.lower() # "hello, world!"
step3 = step2.replace(",", "") # "hello world!"
print(step3) # hello world!
Salida
hello world!
hello world!

Lee la secuencia de izquierda a derecha: primero strip, luego el paso a minúsculas y después replace. Cada método trabaja sobre el resultado del anterior.


Ejercicios de práctica

¡Hora de poner a trabajar esos métodos de cadenas! Cada ejercicio se centra en un grupo distinto de los métodos que acabas de aprender.

Ejercicio 1: limpia la entrada del usuario
Escribe el código

Tienes una cadena desordenada guardada en la variable user_input. Tiene espacios de sobra en los dos lados y letras mayúsculas puestas al azar.

Límpiala así:

1. Quita los espacios en blanco de los dos extremos

2. Pásala toda a minúsculas

Imprime el resultado limpio. La salida debería ser:

hello python
user_input = " HeLLo PyThOn "
# Clean up the input and print it
Ejercicio 2: cuenta cuántas veces aparece una palabra
Escribe el código

Cuenta cuántas veces aparece la palabra "the" en la frase de abajo. Usa el método count().

Imprime el resultado exactamente con este formato:

the appears 4 times

Pista: pasa antes la frase a minúsculas para contar tanto "the" como "The".

sentence = "The cat sat on the mat by the door and The dog watched"
# Count how many times "the" appears and print it
Ejercicio 3: reemplaza todas las apariciones
Escribe el código

Reemplaza cada aparición de "JavaScript" por "Python" en la frase de abajo e imprime el resultado.

Salida esperada:

I love Python. Python is great. Learning Python is fun.
sentence = "I love JavaScript. JavaScript is great. Learning JavaScript is fun."
# Replace JavaScript with Python and print it
Ejercicio 4: divide una línea CSV
Escribe el código

Tienes una línea de valores separados por comas. Divídela en valores sueltos e imprime cada uno en su propia línea.

Salida esperada:

Alice
25
New York
Engineer
csv_line = "Alice,25,New York,Engineer"
# Split the line by commas and print each value
Ejercicio 5: corrige el error (find() frente a index())
Corrige el error

Este código intenta encontrar la posición de "Python" en una frase. Funciona cuando la palabra existe, pero falla cuando no está.

Corrige el código para que:

  • Imprima la posición cuando encuentre la palabra
  • Imprima "Word not found" cuando la palabra no esté
  • Salida esperada:

    Found at position 7
    Word not found

    Pista: el error está en que index() falla cuando la palabra no está. ¿Qué método devuelve -1 en lugar de fallar?

    sentence = "I love Python programming"
    # Find "Python" -- this line works fine
    pos = sentence.index("Python")
    print(f"Found at position {pos}")
    # Find "Java" -- this line crashes!
    pos = sentence.index("Java")
    if pos >= 0:
    print(f"Found at position {pos}")
    else:
    print("Word not found")
    Ejercicio 6: valida un nombre de usuario
    Escribe el código

    Escribe un programa que valide un nombre de usuario según estas reglas:

  • Debe ser alfanumérico (solo letras y números)
  • Debe tener entre 3 y 15 caracteres
  • Te damos tres nombres de usuario. Para cada uno, imprime "Valid" si cumple las dos reglas o "Invalid" si falla alguna de ellas.

    Salida esperada:

    player42: Valid
    ab: Invalid
    hello world!: Invalid
    usernames = ["player42", "ab", "hello world!"]
    # Check each username and print if it's valid or invalid

    Resumen: guía rápida de métodos de cadenas en Python

    Aquí tienes una referencia rápida de todos los métodos de este tutorial:

    MétodoQué haceEjemplo
    upper()Todo en mayúsculas"hi".upper() → "HI"
    lower()Todo en minúsculas"HI".lower() → "hi"
    title()Mayúscula inicial en cada palabra"hi there".title() → "Hi There"
    capitalize()Mayúscula solo en la primera letra"hi there".capitalize() → "Hi there"
    strip()Quita los espacios de los extremos" hi ".strip() → "hi"
    find()Posición de la subcadena (-1 si no está)"hello".find("ll") → 2
    count()Cuenta apariciones"banana".count("a") → 3
    startswith()Comprueba el inicio"hello".startswith("he") → True
    endswith()Comprueba el final"file.py".endswith(".py") → True
    replace()Cambia subcadenas"hi".replace("hi", "bye") → "bye"
    split()Divide en una lista"a,b,c".split(",") → ["a","b","c"]
    join()Une una lista",".join(["a","b"]) → "a,b"
    isdigit()¿Solo dígitos?"123".isdigit() → True
    isalpha()¿Solo letras?"abc".isalpha() → True
    isalnum()¿Letras o dígitos?"abc1".isalnum() → True
    zfill()Rellena con ceros"42".zfill(5) → "00042"

    No necesitas memorizar esta tabla. Lo importante es saber que estos métodos existen para poder consultarlos cuando los necesites.

    ¿Qué sigue?

    En el siguiente tutorial, [Formato de cadenas en Python](/python/python-string-formatting), aprenderás a controlar exactamente cómo aparecen los valores dentro de las cadenas. Dominarás el formato con f-strings, la alineación, el formato de números y mucho más.

    Tutoriales relacionados

    ¿Te sirvió este tutorial?

    Sugerir una mejora