Dividi la stringa usando un delimitatore di nuova riga con Python


101

Devo delimitare la stringa che contiene una nuova riga. Come lo realizzerei? Fare riferimento al codice sottostante.

Ingresso:

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

Uscita desiderata:

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

Ho provato i seguenti approcci:

1. output = data.split('\n')
2. output = data.split('/n')
3. output = data.rstrip().split('\n')

1
Qual è l'output di repr(data)?
Ashwini Chaudhary

Risposte:


187

str.splitlines metodo dovrebbe darti esattamente questo.

>>> 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
Una parte comoda str.splitlinesè che rimuoverà la finale \nse è presente. Cioè, 'foo\nbar\n'.split() == ['foo', 'bar', '']mentrestr.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, per impostazione predefinita, divide per tutti i caratteri di spazio bianco. Se la stringa effettiva ha altri caratteri di spazio bianco, potresti voler usare

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

O come suggerito da @Ashwini Chaudhary nei commenti , puoi usare

print(data.splitlines())

Solo per essere sul lato più sicuro .splitlines, cosa succede se le corde hanno spazi, ecc.
Ashwini Chaudhary

@AshwiniChaudhary Sì, è per questo che ho suggerito split("\n"). È splitlinesmeglio di .split("\n")?
quarto giorno

4
Funzionerà anche per \r\naltri tipi di confini di linea.
Ashwini Chaudhary

Se la tua stringa termina con a \n, splitlines()la ignorerà mentre split("\n")avrà una stringa vuota aggiuntiva ""alla fine del risultato.
Moberg

10

Se vuoi dividere solo per newline , è meglio usare splitlines () :

Esempio:

>>> 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 () funziona anche:

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

Però:

>>> data = """
... a, eqw, qwe
... v, ewr, err
... """
>>> data
'\na, eqw, qwe\nv, ewr, err\n'
>>> data.split()
['a,', 'eqw,', 'qwe', 'v,', 'ewr,', 'err']

sembra strano che non devi passare il personaggio per dividerlo come data.split('\n')?

7

Esiste un metodo specifico per questo scopo:

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

4

Ecco qui:

>>> 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']
>>> 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.