Metodo String split de Python

De ChuWiki

Veamos cómo partir cadenas en python usando el método split() y sus variantes.

Método partition() y rpartition()[editar]

Al método partition() se le pasa un separador y devuelve una tupla con tres elementos: lo que hay antes de la primera ocurrencia del separador, el separdor en sí y el resto de la cadena. Veamos ejemplos

>>> cadena = "uno,dos"
>>> cadena.partition(",")
('uno', ',', 'dos')

>>> cadena = "uno,dos,tres"
>>> cadena.partition(",")
('uno', ',', 'dos,tres')

>>> cadena = "uno._.dos"
>>> cadena.partition("._.")
('uno', '._.', 'dos')

>>> cadena = "uno,dos,tres"
>>> cadena.partition(":")
('uno,dos,tres', '', '')

Hemos puesto cuatro casos

  • En el primero dos textos separados por una coma. El resultado es el esperado.
  • En el segundo caso, tres textos separados por comas. La función partition() solo parte hasta la primera coma.
  • En el terver caso, el separador no es un caracter simple, sino una cadena de tres caracteres "._.".
  • En el cuarto caso el separador ":" no existe en la cadena. Nos devuelve en la tupla la cadena completa y dos cadenas vacías.

El método rpartition() hace lo mismo, pero empezando por el final de la cadena. Vamos sólo un ejemplo sencillo.

>>> cadena = "uno,dos,tres"
>>> cadena.rpartition(",")
('uno,dos', ',', 'tres')

Método split() y rsplit()[editar]

El método split() parte la cadena en tantos trozos como hagan falta usando el separador que se pasa como parámetro. Veamos ejemplos

>>> cadena = "uno,dos,tres"
>>> cadena.split(",")
['uno', 'dos', 'tres']

Si hay varios separadores seguidos considera que hay cadenas vacías en medio

>>> cadena = "uno,dos,,tres"
>>> cadena.split(",")
['uno', 'dos', '', 'tres']

Al igual que partition(), el separador no tiene por qué ser un único caracter

>>> cadena = "uno._.dos._.tres"
>>> cadena.split("._.")
['uno', 'dos', 'tres']

El método split() admite un segundo parámetro que sería el máximo número de trozos que queremos obtener. Por defecto es -1, que quiere decir que queremos todos los trozos que haya. Si limitamos, el último elemento de la lista resultado será el resto de la cadena original. Veamos un ejemplo

>>> cadena = "uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve"
>>> cadena.split(",",5)
['uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis,siete,ocho,nueve']

Hemos indicado que sólo queremos 5 elementos, así que la lista resultado tiene seis: Los cinco que hemos pedido y el resto de la cadena.

El método rsplit() funciona igual que split() salvo en este último caso. Empieza la separación por el final de la cadena y nos devuelve como resto el principio.

>>> cadena = "uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve"
>>> cadena.rsplit(",",5)
['uno,dos,tres,cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve']

El primer elemento de la lista resultado es el "sobrante" tras separar los cinco elementos que hay al final de la cadena original.

Método splitlines()[editar]

El método splitlines() se comporta muy similar a split() salvo que el separador que usa y que no hay que pasarle como parámetros son los fin de línea o retorno de carro (caracteres \n y \r). Veamos ejemplos

>>> cadena = "uno\ndos\rtres\r\ncuatro\n\n\ncinco\n"
>>> cadena.splitlines()
['uno', 'dos', 'tres', 'cuatro', '', '', 'cinco']

Hemos puesto una cadena con textos y varios posibles fines de linea: Un \n solo, un \r solo, un \r\n (es el fin de linea que usa windows), tres \n seguidos y un \n al final. Puedes ver que lo hace correctamente con dos puntos importantes a tener en cuenta:

  • Cuando hay varios \n seguidos, considera que hay líneas vacías y devuelve por tanto cadenas vacias ""
  • En \n final no hace que haya una línea vacía detrás.

El método admite un parámetro boolean, que por defecto es False. Si lo ponemos a True, mantendrá en los trozos de cadena el caracter de fin de linea

>>> cadena = "uno\ndos\rtres\r\ncuatro\n\n\ncinco\n"
>>> cadena.splitlines(True)
['uno\n', 'dos\r', 'tres\r\n', 'cuatro\n', '\n', '\n', 'cinco\n']