Divida a string usando um delimitador de nova linha com Python

101

Preciso delimitar a string que possui uma nova linha. Como eu o alcançaria? Consulte o código abaixo.

Entrada:

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

Resultado desejado:

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

Eu tentei as abordagens abaixo:

1. output = data.split('\n')
2. output = data.split('/n')
3. output = data.rstrip().split('\n')
Hariharan
fonte
1
Qual é a saída de repr(data)?
Ashwini Chaudhary

Respostas:

187

str.splitlines método deve fornecer exatamente isso.

>>> 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
fonte
6
Uma parte conveniente str.splitlinesé que removerá o final, \nse estiver presente. 'foo\nbar\n'.split() == ['foo', 'bar', '']str.splitlines('foo\nbar\n') == ['foo', 'bar']
Ou
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, por padrão, divide por todos os caracteres de espaço em branco. Se a string real tiver qualquer outro caractere de espaço em branco, você pode querer usar

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

Ou como @Ashwini Chaudhary sugeriu nos comentários , você pode usar

print(data.splitlines())
os quatro olhos
fonte
Apenas para uma utilização mais segura .splitlines, e se as cordas tiverem espaços, etc.
Ashwini Chaudhary
@AshwiniChaudhary Sim, é por isso que sugeri split("\n"). É splitlinesmelhor do que .split("\n")?
thefourtheye
4
Funcionará para \r\noutros tipos de limites de linha também.
Ashwini Chaudhary
Se sua string terminar em a \n, splitlines()irá ignorá-la, enquanto split("\n")terá uma string vazia adicional ""no final do resultado.
Moberg
10

Se você deseja dividir apenas por novas linhas , é melhor usar linhas de divisão () :

Exemplo:

>>> 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']

Com split () funciona também:

>>> 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']

Contudo:

>>> data = """
... a, eqw, qwe
... v, ewr, err
... """
>>> data
'\na, eqw, qwe\nv, ewr, err\n'
>>> data.split()
['a,', 'eqw,', 'qwe', 'v,', 'ewr,', 'err']
KiraLT
fonte
parece estranho que você não tenha que passar o personagem para dividir como data.split('\n')?
7

Existe um método específico para este propósito:

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

Aqui está:

>>> 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']
>>> 
Jogos Brainiac
fonte