Metodo String split de Python
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']