En esta página

Cadenas de Python: convertir, limpiar, buscar y formatear

Las cadenas son el tipo de datos que más tocas en Python: la entrada del usuario, el contenido de los archivos, las páginas web y las filas de un CSV llegan todos como texto. Es fácil subestimarlas, porque una cadena de Python es inmutable: ningún método la cambia en su sitio; cada operación devuelve una cadena nueva. Esta página organiza las 115 guías de cadenas de DelftStack según el trabajo que estés haciendo, a lo largo de cuatro líneas de tarea: convertir texto a otros tipos y de vuelta, limpiar los caracteres que no pertenecen, buscar y comprobar qué contiene una cadena, y formatear o reemplazar texto para la salida.

Operaciones con cadenas de Python de un vistazo: convertir, limpiar, buscar y formatear texto

La ruta de aprendizaje de las cadenas

Empieza con cinco minutos de conceptos básicos: cómo se construyen las cadenas, cómo se indexan y se cortan en rebanadas, y por qué la inmutabilidad significa que siempre debes quedarte con el valor devuelto. Después aprende a buscar y limpiar: find(), el operador in, strip() y replace() cubren la mayor parte del trabajo diario con texto. Continúa con la conversión, donde las cadenas intercambian su lugar con listas, números, diccionarios y bytes. Termina con el formato y el reemplazo, donde las f-strings son la opción por defecto y los estilos antiguos aparecen solo donde aún merecen su lugar. Cada paso siguiente es un grupo de esta página, en el orden en que hay que aprenderlos.

Conceptos básicos en cinco minutos: crear, unir y repetir

Una cadena es una secuencia de caracteres entre comillas simples o dobles; las comillas triples abarcan varias líneas, y la indexación junto con el corte en rebanadas permite leer cualquier parte. Dos hechos hacen la mayor parte del trabajo: len() mide una cadena, y construir una más larga siempre produce un valor nuevo.

  • Repetir cadena N veces en Python — Multiplica con * para un número fijo de copias, luego repite y corta para alcanzar una longitud objetivo exacta, validando las fuentes vacías y las longitudes negativas.
  • Copiar cadena en Python — Seis rutas para duplicar — concatenación con cadena vacía, corte completo, str(), %, format() y f-strings — tras explicar por qué la inmutabilidad hace que ambas variables compartan un solo valor.
  • Crear una cadena de varias líneas en Python — Comillas triples para texto realmente multilínea, barra invertida y concatenación entre paréntesis para una sola línea lógica, y textwrap.fill() para una salida de ancho fijo.
  • Agregar una cadena a otra en Python — + frente a str.join(); join() gana cuando hay muchas piezas porque cada + construye una cadena intermedia nueva.

Convertir: cadenas a listas, números y de vuelta

La conversión es donde el trabajo con cadenas se gana su valor: los datos llegan como texto y se usan como otra cosa. Las listas son la puerta más concurrida, los números la siguiente; los contenedores se aplanan con str() o join(), y los bytes solo cruzan mediante codificaciones explícitas. Un vecino vive en otra parte: convertir un datetime en cadena pertenece a las guías de Datetime — consulta la sección Datetime del pilar de Python.

Limpiar y eliminar: quita lo que no pertenece

Limpiar es el terreno local de este clúster: las páginas raspadas, las exportaciones y la entrada del usuario llegan con caracteres que nunca fueron invitados. Elige según la forma de la suciedad: replace() para una subcadena conocida, translate() con una tabla para un conjunto entero de caracteres de una vez, y expresiones regulares cuando la suciedad es un patrón, no un literal.

Buscar, comprobar y contar

Buscar es la mayor demanda insatisfecha de este clúster: los lectores saben el carácter que quieren y necesitan su posición, su cantidad o una respuesta de sí o no. Mantén clara la división del trabajo: in responde si está, find() responde dónde está el primero, index() responde dónde y se queja en voz alta cuando no hay coincidencia, y count() responde cuántos hay.

Mayúsculas y minúsculas, comparación y relleno

El caso es donde las comparaciones fallan en silencio: Python compara por punto de código Unicode, así que el caso y las letras especiales cuentan todos. Normaliza antes de comparar — lower() o upper() para el texto ordinario, casefold() cuando los pares Unicode deben coincidir — y rellena con ljust(), rjust(), center() o zfill() para la presentación.

Formatear y reemplazar

Para el código nuevo, formatear significa f-strings: los valores se sientan dentro de la plantilla donde puedes leerlos, y las especificaciones de formato controlan el ancho y la precisión. str.format() sigue siendo lo correcto cuando la plantilla vive por separado o se reutiliza, y el formato con % sobrevive en el código antiguo que seguirás encontrando. El reemplazo obedece a la inmutabilidad como todo lo demás: nunca editas una cadena, construyes la corregida.

Mapa de métodos de cadena

Python incluye 47 métodos de cadena integrados, y este mapa encuentra el adecuado con rapidez. Léelo por verbos: la familia is* comprueba, los métodos de caso transforman, split y join desarman y reconstruyen, y los métodos de búsqueda localizan. Donde una guía profundiza en un método, la tercera columna enlaza a ella; una celda vacía significa que la descripción de una línea basta.

Método Qué hace En profundidad
capitalize() Pone en mayúscula el primer carácter y el resto en minúscula En profundidad
casefold() Minúsculas agresivas, pensadas para la comparación sin distinción de caso En profundidad
center() Centra la cadena en un campo del ancho dado En profundidad
count() Cuenta las apariciones no solapadas de una subcadena En profundidad
encode() Codifica la cadena a bytes con la codificación elegida En profundidad
endswith() Comprueba si la cadena termina con un sufijo
expandtabs() Reemplaza los caracteres de tabulación por espacios
find() Índice más bajo de una subcadena, o -1 cuando está ausente En profundidad
format() Formatea valores en marcadores {} En profundidad
format_map() Como format(), con los valores tomados de un mapeo
index() Índice más bajo de una subcadena; lanza ValueError cuando está ausente En profundidad
isalnum() Verdadero cuando cada carácter es una letra o un dígito En profundidad
isalpha() Verdadero cuando cada carácter es alfabético
isascii() Verdadero cuando cada carácter es ASCII
isdecimal() Verdadero cuando cada carácter es un dígito decimal
isdigit() Verdadero cuando cada carácter es un dígito En profundidad
isidentifier() Verdadero cuando la cadena es un identificador válido de Python
islower() Verdadero cuando todas las letras están en minúscula
isnumeric() Verdadero cuando cada carácter es numérico
isprintable() Verdadero cuando cada carácter es imprimible
isspace() Verdadero cuando cada carácter es un espacio en blanco
istitle() Verdadero cuando la cadena está en formato de título
isupper() Verdadero cuando todas las letras están en mayúscula
join() Une un iterable de cadenas usando esta cadena como separador En profundidad
ljust() Justifica a la izquierda en un campo del ancho dado En profundidad
lower() Devuelve una copia en minúsculas En profundidad
lstrip() Elimina los caracteres iniciales (espacio en blanco por defecto)
maketrans() Construye una tabla de traducción para translate() En profundidad
partition() Divide en el primer separador en una tupla de tres partes
removeprefix() Quita un prefijo cuando está presente
removesuffix() Quita un sufijo cuando está presente
replace() Reemplaza las apariciones de una subcadena por otra En profundidad
rfind() Índice más alto de una subcadena, o -1 cuando está ausente En profundidad
rindex() Índice más alto de una subcadena; lanza ValueError cuando está ausente
rjust() Justifica a la derecha en un campo del ancho dado En profundidad
rpartition() Divide en el último separador en una tupla de tres partes
rsplit() Divide por un separador, contando desde la derecha
rstrip() Elimina los caracteres finales (espacio en blanco por defecto)
split() Divide por un separador en una lista En profundidad
splitlines() Divide por los límites de línea en una lista
startswith() Comprueba si la cadena empieza con un prefijo En profundidad
strip() Elimina los caracteres iniciales y finales En profundidad
swapcase() Devuelve una copia con el caso de cada carácter invertido
title() Devuelve una copia en formato de título, con cada palabra en mayúscula
translate() Mapea los caracteres a través de una tabla de traducción En profundidad
upper() Devuelve una copia en mayúsculas En profundidad
zfill() Rellena con ceros a la izquierda hasta el ancho dado En profundidad

Preguntas frecuentes

¿Cómo convierto una cadena en una lista en Python?

Decide qué debe ser cada elemento y elige después la herramienta que coincide. list(text) da un elemento por carácter; text.split() da palabras, y text.split(",") da campos separados por un delimitador, conservando los campos vacíos. Para un texto que ya parece una lista de Python, analízalo con ast.literal_eval() y comprueba que el resultado es realmente una lista. Nunca uses eval() con una entrada que no controles. La explicación completa está en Cómo convertir una cadena en una lista en Python.

¿Cómo compruebo si una cadena contiene una subcadena o una palabra?

Para una prueba sencilla de subcadena, usa el operador in: "word" in text devuelve un booleano y distingue mayúsculas y minúsculas. Cuando también necesitas la posición, find() devuelve el primer índice o -1, mientras que index() lanza ValueError en su lugar. Ten en cuenta que in también coincide dentro de palabras más grandes — "is" in "This" es verdadero — así que para una palabra completa, tokeniza o usa una expresión regular con límites \b, como se muestra en Compruebe si una cadena contiene Word en Python.

¿Cómo quito la puntuación o los caracteres especiales de una cadena?

Define primero qué debe desaparecer: solo la puntuación, o todo lo que no sea una letra o un dígito. Para la puntuación, filtra contra string.punctuation, sustituye con la expresión regular [^\w\s], o borra un conjunto entero de una vez con una tabla de str.translate() creada por maketrans(), la opción más rápida. Para una limpieza más amplia, un filtro isalnum() conserva las letras y los dígitos Unicode. Cómo quitar la puntuación de una cadena en Python repasa cada variante.

¿Por qué Python dice «not all arguments converted during string formatting»?

Este TypeError procede del formato con %: la plantilla contiene menos marcadores que la tupla de valores que pasaste, así que Python llega al final de la plantilla con argumentos sobrantes; por ejemplo, "Value: " % (1, 2). Da a cada valor exactamente un marcador, envuelve un único valor en una tupla de un elemento y escapa un signo de porcentaje literal como %%`. La guía dedicada a este error disecciona el mensaje caso por caso.

¿Existe un toString() en Python?

No. Python no tiene un método toString(); buscarlo es un hábito traído de Java. El equivalente es el integrado str(value), que devuelve una cadena legible para números, colecciones y la mayoría de los objetos. Usa join() para combinar muchas cadenas, f-strings para construir mensajes, y define __str__() en tus propias clases para controlar cómo se imprimen. Ten en cuenta que str() produce texto de visualización, no JSON ni CSV. Consulta Equivalente de tostring() en Python.

¿Cómo reemplazo un carácter en un índice concreto?

No puedes asignar dentro de una cadena: text[2] = "m" lanza TypeError, porque las cadenas son inmutables. Construye el reemplazo en su lugar: corta alrededor de la posición, text[:2] + "m" + text[3:], o convierte a lista, asigna en el índice y vuelve a unir con "".join(...). Ambos devuelven una cadena nueva y dejan intacta la original; valida el índice contra len(text) cuando proceda de la entrada del usuario. Reemplazar carácter en cadena en el índice en Python muestra ambos métodos.

Todas las guías de cadenas de Python

Conceptos básicos

Convertir

Limpiar y eliminar

Buscar, comprobar y contar

Mayúsculas y minúsculas, comparación y relleno

Formatear y reemplazar

Más artículos sobre cadenas