Dividir cadena usando un delimitador de nueva línea con Python

101

Necesito delimitar la cadena que tiene una nueva línea. ¿Cómo lo lograría? Consulte el código a continuación.

Entrada:

data = """a,b,c
d,e,f
g,h,i
j,k,l"""

Salida deseada:

['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

He probado los siguientes enfoques:

1. output = data.split('\n')
2. output = data.split('/n')
3. output = data.rstrip().split('\n')
Hariharan
fuente
1
¿Cuál es la salida de repr(data)?
Ashwini Chaudhary

Respuestas:

187

str.splitlines El método debería darte exactamente eso.

>>> data = """a,b,c
... d,e,f
... g,h,i
... j,k,l"""
>>> data.splitlines()
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
wim
fuente
6
Una parte conveniente str.splitlineses que eliminará la final \nsi está presente. Es decir, 'foo\nbar\n'.split() == ['foo', 'bar', '']mientrasstr.splitlines('foo\nbar\n') == ['foo', 'bar']
Matthew Moisen
10
data = """a,b,c
d,e,f
g,h,i
j,k,l"""

print(data.split())       # ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

str.split, de forma predeterminada, se divide por todos los caracteres de espacio en blanco. Si la cadena real tiene otros caracteres de espacio en blanco, es posible que desee utilizar

print(data.split("\n"))   # ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

O como @Ashwini Chaudhary sugirió en los comentarios , puede usar

print(data.splitlines())
los cuatro ojos
fuente
Solo para estar en el lado más seguro, use .splitlines, ¿qué pasa si las cuerdas tienen espacios, etc.?
Ashwini Chaudhary
@AshwiniChaudhary Sí, por eso lo sugerí split("\n"). Es splitlinesmejor que .split("\n")?
thefourtheye
4
También funcionará para \r\notros tipos de límites de línea.
Ashwini Chaudhary
Si su cadena termina en a \n, la splitlines()ignorará, mientras split("\n")que tendrá una cadena vacía adicional ""al final del resultado.
Moberg
10

Si desea dividir solo por nuevas líneas , es mejor usar splitlines () :

Ejemplo:

>>> data = """a,b,c
... d,e,f
... g,h,i
... j,k,l"""
>>> data
'a,b,c\nd,e,f\ng,h,i\nj,k,l'
>>> data.splitlines()
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

Con split () también funciona:

>>> data = """a,b,c
... d,e,f
... g,h,i
... j,k,l"""
>>> data
'a,b,c\nd,e,f\ng,h,i\nj,k,l'
>>> data.split()
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

Sin embargo:

>>> data = """
... a, eqw, qwe
... v, ewr, err
... """
>>> data
'\na, eqw, qwe\nv, ewr, err\n'
>>> data.split()
['a,', 'eqw,', 'qwe', 'v,', 'ewr,', 'err']
KiraLT
fuente
parece extraño que no tengas que pasar el personaje para dividir por like data.split('\n')?
7

Existe un método específicamente para este propósito:

data.splitlines()
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
pajton
fuente
4

Aqui tienes:

>>> data = """a,b,c
d,e,f
g,h,i
j,k,l"""
>>> data.split()  # split automatically splits through \n and space
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
>>> 
Juegos Brainiac
fuente