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

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

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())

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

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

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']
>>> 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.