Cómo dividir cadenas en Python: 9 técnicas esenciales con ejemplos

La manipulación de cadenas es esencial para cualquier desarrollador experimentado de Python, especialmente al trabajar con datos reales como archivos CSV, registros o texto desordenado. A veces, necesitas dividir por espacios, otras veces necesitas manejar delimitadores personalizados o incluso extraer un fragmento de una cadena sin complicaciones. Python cuenta con un conjunto de herramientas bastante bueno para hacer todo eso; la mayoría de la gente probablemente esté familiarizada con str.split(), pero hay muchos trucos y otras funciones que pueden simplificar la vida, especialmente cuando las cosas se complican. Esta guía profundiza en nueve maneras diferentes de dividir cadenas, para que no te pille desprevenido la próxima vez que analices texto extraño o necesites el fragmento de datos adecuado. Encontrarás ejemplos paso a paso, casos de uso y algunos consejos basados ​​en situaciones reales.

Consulte la API oficial para str.split: docs.python.org.

Cómo dividir cadenas en Python: algunas formas que realmente funcionan

Dividir en espacios en blanco constr.split()

De forma predeterminada, solo se invocan split()fragmentos de espacio en blanco (sin argumentos), como espacios, tabulaciones, saltos de línea, etc. Resulta muy práctico para una limpieza rápida si el texto no está muy estructurado, pero se desea obtener palabras o tokens individuales.

s = "Python makes text processing easier" parts = s.split() print(parts) # ['Python', 'makes', 'text', 'processing', 'easier'] 

Bastante sencillo. A veces, conviene guardar el resultado de la división para reutilizarlo, como:

words = s.split() print(words[0]) # Python 

En algunas configuraciones, especialmente si las cadenas tienen espacios iniciales o finales, esto a veces puede comportarse de manera extraña, así que esté atento.

Dividir utilizando un delimitador específico

Si su texto está estructurado con separadores claros, como CSV, split()un delimitador es su amigo.

csv = "Alice, Bob, Charlie" names = csv.split(", ") print(names) # ['Alice', 'Bob', 'Charlie'] 

Lo mismo ocurre con las pestañas:

tsv = "2\tapple juice\t2.00" fields = tsv.split("\t") print(fields) # ['2', 'apple juice', '2.00'] 

Si está lidiando con delimitadores irregulares o caracteres múltiples, esto también funciona bien, pero tenga cuidado con los datos inconsistentes: a veces pueden causar problemas.

Limite el número de divisiones conmaxsplit

Esta opción es útil si solo quieres dividir la cadena una o dos veces, no en un millón de fragmentos. Por ejemplo, cuando tienes una entrada de registro y solo quieres las primeras partes.

log = "2025-01-15 08:45:23 INFO User logged in" date, time, level, message = log.split(maxsplit=3) print(date, time, level, message) # '2025-01-15' '08:45:23' 'INFO' 'User logged in' 

O tal vez:

"A B C".split(maxsplit=1) # ['A', 'B C'] 

Esto ayuda a mantener las cosas ordenadas si solo te interesan los primeros fragmentos de una cadena.

Separado de la derecha conrsplit()

A veces, la última parte de una cadena es la más importante, como extraer el nombre de un archivo de una ruta.rsplit()hace el trabajo dividiendo desde el final.

path = "/home/user/docs/tax.txt" directory, filename = path.rsplit("/", maxsplit=1) print(directory) # /home/user/docs print(filename) # tax.txt 

Esto es especialmente útil cuando se analizan rutas de archivos o URL donde la última sección varía.

Úselo partition()para una sola división con el separador incluido

Si solo importa el primer separador, partition()divide la cadena en una tupla que contiene la parte anterior, el separador y el resto. Es limpio y fiable para capturar solo el primer fragmento.

s = "abcd qwrre qwedsasd zxcwsacds" head, sep, tail = s.partition(" ") print(head) # abcd print(tail) # qwrre qwedsasd zxcwsacds 

A diferencia de split(maxsplit=1), esto siempre devuelve una tupla de tres partes con el separador si se encuentra.

Dividir en líneas consplitlines()

Ideal para trabajar con texto de varias líneas, registros o entradas de usuario con saltos de línea. Simplifica enormemente la conversión de un gran bloque de texto en una lista de líneas.

text = "Hello\nHow are you?\n" lines = text.splitlines() print(lines) # ['Hello', 'How are you?'] 

Y si quieres conservar los finales de línea, splitlines(keepends=True)¿lo haces? No sé por qué, pero a veces necesitas conservar esos saltos para su posterior procesamiento.

Salta a las divisiones de expresiones regulares conre.split()

Aquí es donde la cosa se complica. Si necesitas dividir en varios delimitadores, espacios o patrones extraños, el módulo re es tu mejor aliado.

import re data = "Apple:Orange|Lemon-Date" parts = re.split(r"[:|-]", data) print(parts) # ['Apple', 'Orange', 'Lemon', 'Date'] 

¿Manejas datos desordenados con varios delimitadores a la vez? No hay problema. Aquí tienes un ejemplo con varios delimitadores y espacios en blanco:

messy = "Apple :::::3:Orange | 2|||Lemon --1 AND Date :: 10" pattern = r"\s*(?:[:|\-]+|AND)\s*" print(re.split(pattern, messy)) # ['Apple', '3', 'Orange', '2', 'Lemon', '1', 'Date', '10'] 

Prepárese: las expresiones regulares pueden resultar confusas, pero son poderosas cuando se usan correctamente.

Se divide en personajes fácilmente

¿Necesitas cada carácter individual? Simplemente convierte la cadena en una lista:

chars = list("foobar") print(chars) # ['f', 'o', 'o', 'b', 'a', 'r'] 

Simple, pero súper útil si estás realizando algún procesamiento o comparaciones a nivel de personaje.

Dividir varias líneas en palabras

Si trabajas con varias líneas de texto y quieres crear una lista grande de palabras, recorrerlas en bucle o hacer una lista por comprensión es la solución. Por ejemplo:

book_lines = ["the history of", "australian exploration from 1788 to 1888"] words = [] for line in book_lines: words.extend(line.split()) print(words) # ['the', 'history', 'of', 'australian', 'exploration', 'from', '1788', 'to', '1888'] 

O una breve frase:

words = [w for line in book_lines for w in line.split()] 

Cosas del mundo real. Funciona bastante bien para tokenizar texto.

Consejos rápidos para dividir cuerdas

  • split()crea nuevas listas; sus cadenas permanecen iguales (las cadenas son inmutables, después de todo).
  • Asigna siempre la salida: tokens = s.split(). De lo contrario, solo estás desperdiciando código.
  • Úselo split("\t")cuando se trabaje con datos TSV.
  • Cuando solo necesitas la primera parte de una cadena partition()o split(maxsplit=1)son opciones más limpias.
  • ¿Se dirige a las rutas de archivos? rsplit()Funciona de maravilla para la extracción de nombres de archivos finales.
  • ¿Manejo de entradas multi-línea? splitlines()Al rescate.

Resumen

Resulta que la caja de herramientas de división de cadenas de Python es bastante versátil. Ya sea que estés analizando archivos CSV, registros o simplemente limpiando la entrada del usuario, suele haber un método o función que lo facilita. Practicar estas técnicas hace que tu código sea más eficiente, limpio y menos frustrante al trabajar con patrones de texto complejos. Con el tiempo, estos trucos pueden ahorrarte muchos dolores de cabeza, especialmente al trabajar con fuentes de datos desordenadas o impredecibles.

Resumen

  • Úselo split()para divisiones simples de espacios en blanco o datos estructurados como CSV.
  • Elija rsplit()partes finales como nombres de archivos en rutas.
  • Úselo partition()para dividir una sola toma: conveniente y claro.
  • splitlines()Funciona para bloques de varias líneas, registros o entradas de usuario.
  • Regex es tu amigo para delimitadores complejos con re.split().
  • Dividir en caracteres con list().
  • ¿Manejas varias líneas? Repasa tus líneas con split()una comprensión.

Resumen

Sinceramente, dominar estos métodos puede marcar la diferencia al trabajar con datos reales y desordenados. No todas las divisiones son sencillas, y a veces necesitarás expresiones regulares o una combinación de trucos. Si te familiarizas con ellos, programar scripts de Python para el procesamiento de texto te resultará mucho menos tedioso.¡Buena suerte analizando esas cadenas complejas! Tú puedes.