¿Alguna vez te has encontrado con una cadena de texto enorme en Python y has necesitado extraer solo una parte? Las cadenas de texto pueden ser extensas y a menudo contienen datos superfluos, como información de servicio en archivos de registro de aplicaciones o errores de entrada del usuario.

Para extraer la información necesaria de una cadena, a menudo es óptimo segmentarla en partes. Aquí es donde split en Python se convierte en tu mejor aliado. En este artículo explico su sintaxis y capacidades.

En resumen, la función split() en Python sirve para dividir una cadena de texto (string) en una lista de subcadenas, utilizando un delimitador específico. Es una herramienta fundamental para el análisis de texto, la extracción de datos de archivos CSV y el procesamiento de entradas de usuario, simplificando la manipulación de datos.

Diagrama de la función split en Python dividiendo una cadena en una lista.
Esquema visual de cómo el método split() de Python convierte una cadena en una lista.

¿Para Qué Sirve la Función split() en Python?

split() es una función en Python utilizada para dividir una cadena de texto en múltiples partes. Resulta útil para split string en Python cuando trabajas con análisis de texto o la extracción de datos de archivos CSV y registros (logs).

La sintaxis básica de la función split() es la siguiente, y es consistente en split en Python 3 y versiones posteriores:

str.split(sep=None, maxsplit=-1)

En el ejemplo anterior:

  • sep — es el delimitador por el cual se divide la cadena original. Por defecto, o si se especifica None, se considerarán como delimitadores todos los caracteres de espacio en blanco (espacio, salto de línea, tabulación, etc.).
  • maxsplit — es el parámetro que define el número máximo de divisiones a realizar. Por defecto (o si se especifica -1), la cadena se divide en todas las subcadenas posibles.

Cómo Dividir una Cadena con split() en Python

A continuación, reviso los métodos para dividir cadenas utilizando la función split().

Por espacio en blanco

El caso de uso más frecuente de split() es la división de una cadena por espacios en blanco. Para ello, no es necesario especificar el delimitador sep al invocar la función. A modo de ejemplo, creo una cadena con una enumeración de nombres, para luego dividirla por espacios e imprimir el resultado en la consola con print():

# Cadena a dividir
cadena = 'Ana, Luis, Inés, David, Omar, Natalia'
print(cadena.split())

# Resultado:
# ['Ana,', 'Luis,', 'Inés,', 'David,', 'Omar,', 'Natalia']

Como resultado, se obtiene una lista de subcadenas. Es importante notar que las comas permanecen adyacentes a los nombres. Esto ocurre porque la división se realizó por espacios, y las comas son tratadas como cualquier otro carácter alfabético. Por lo tanto, la función split() no las elimina.

Si utilizas en la cadena el carácter de tabulación (\t) y de nueva línea (\n), el resultado no varía, ya que ambos son considerados caracteres de espacio en blanco:

# Cadena a dividir
cadena = 'Ana\nLuis\tInés, David\nOmar\nNatalia'
print(cadena.split())

# Resultado:
#['Ana', 'Luis', 'Inés,', 'David', 'Omar', 'Natalia']

Por coma u otro carácter

Para dividir una cadena por una coma o cualquier otro carácter, puedes especificar el delimitador como argumento en la función split(). Por ejemplo, creo una cadena con nombres de animales y la divido por la coma. El resultado será una lista compuesta por palabras individuales:

# Cadena a dividir
cadena = 'oso,cerdo,conejo,burro,búho,tigre,canguro'
print(cadena.split(','))

# Resultado:
# ['oso', 'cerdo', 'conejo', 'burro', 'búho', 'tigre', 'canguro']

Como delimitador se puede utilizar cualquier otro carácter. En el siguiente ejemplo, dividimos la cadena por el símbolo de asterisco *. Si el delimitador aparece varias veces de forma consecutiva, Python genera cadenas vacías:

# Cadena a dividir
cadena = 'abc*de***frrd*18'
print(cadena.split('*'))

# Resultado:
# ['abc', 'de', '', '', 'frrd', '18']

Por una secuencia de caracteres

En ocasiones, las cadenas contienen delimitadores compuestos por combinaciones de caracteres. En tales casos, es posible pasar dicha secuencia a la función split().

En el siguiente ejemplo, la cadena text contiene datos de un formulario de usuario, donde los campos están separados por una secuencia de doble almohadilla (##). Al pasar esta secuencia a split(), obtendrás una lista de subcadenas en formato “clave: valor”:

# Cadena a dividir
text = "nombre: Alejandro##apellido: Pérez##edad:30##ciudad: Madrid"

# Uso de split() para dividir la cadena
parts = text.split("##")
print(parts)

# Resultado
# ['nombre: Alejandro', 'apellido: Pérez', 'edad:30', 'ciudad: Madrid']

Por múltiples delimitadores

Mediante el uso de expresiones regulares, es posible dividir una cadena por múltiples caracteres o secuencias de forma simultánea. Por ejemplo, si necesitas realizar una división por coma, punto, signo de interrogación, espacio y salto de línea, debes pasar a split() la expresión regular $$r'[,.?\n ]+’$$, donde:

  • Los corchetes [] se utilizan para definir un conjunto de caracteres, cada uno de los cuales puede actuar como delimitador.
  • Dentro de los corchetes se enumeran los caracteres delimitadores: coma ,, punto ., signo de interrogación ?, salto de línea \n, y espacio .
  • El signo + después de los corchetes indica que el delimitador puede incluir uno o más caracteres del conjunto definido.

Para trabajar con expresiones regulares, es necesario importar el módulo re. Puedes consultar la documentación oficial del módulo re para más detalles. La función de división de cadenas se invoca como re.split(r'[,.\n? ]+', text). Como primer argumento se proporciona la expresión regular y, como segundo, la cadena a dividir:

Ejemplo de código de split en Python con expresiones regulares.
Captura de código mostrando el uso de re.split() en Python para dividir una cadena usando múltiples delimitadores como coma y punto.
# Importar el módulo
import re

# Texto a dividir
text = "Uno,dos,tres,cuatro.\n¿Puedo tener\nun poco más?|"

# Usar re.split con una expresión regular para dividir la cadena
parts = re.split(r'[,.\n? ]+', text)
print(parts)

# Resultado
# ['Uno', 'dos', 'tres', 'cuatro', '¿Puedo', 'tener', 'un', 'poco', 'más', '|']

Limitar el Número de Divisiones con maxsplit

Como segundo argumento de la función split(), puedes pasar un valor para el parámetro maxsplit, que define el número máximo de divisiones a realizar. Por ejemplo, si especificas maxsplit=3, Python dividirá la cadena 3 veces, resultando en 4 (maxsplit+1) elementos. El valor por defecto de maxsplit es -1, lo que provoca que la división se realice tantas veces como sea posible.

A modo de ejemplo, divide la siguiente cadena por la barra diagonal (/) un máximo de dos veces. Después de la segunda división, Python devolverá el resto de la cadena sin modificaciones:

text = "uno/dos/tres/cuatro"
parts = text.split('/', maxsplit=2)
print(parts)  
# Resultado: ['uno', 'dos', 'tres/cuatro']

Cuándo Usar split() en tus Proyectos de Python

La función split() en Python es una herramienta eficiente para el análisis sintáctico de datos (parsing), la lectura de archivos y el procesamiento de entradas de usuario. Si en algún momento necesitas hacer la operación inversa (unir una lista de cadenas), el método join() es la herramienta que buscas. Además, split() se combina a la perfección con otros métodos de cadena como el método replace() para limpiar y procesar datos de forma robusta. Permite segmentar rápidamente una cadena en elementos para su posterior manipulación, a menudo usando bucles para procesar cada parte.

La función soporta la división de cadenas tanto por caracteres fijos como por patrones mediante expresiones regulares. El parámetro maxsplit ofrece control sobre el número máximo de subcadenas a generar.

Categorizado en:

Python,