Diviser la chaîne en utilisant un délimiteur de nouvelle ligne avec Python

101

J'ai besoin de délimiter la chaîne qui contient une nouvelle ligne. Comment pourrais-je y parvenir? Veuillez vous référer au code ci-dessous.

Contribution:

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

Sortie souhaitée:

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

J'ai essayé les approches ci-dessous:

1. output = data.split('\n')
2. output = data.split('/n')
3. output = data.rstrip().split('\n')
Hariharan
la source
1
Quelle est la sortie de repr(data)?
Ashwini Chaudhary

Réponses:

187

str.splitlines méthode devrait vous donner exactement cela.

>>> 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
la source
6
Une partie pratique str.splitlinesest qu'il supprimera la finale \nsi elle est présente. Ie, 'foo\nbar\n'.split() == ['foo', 'bar', '']whilestr.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, par défaut, divise par tous les caractères d'espacement. Si la chaîne réelle contient d'autres caractères d'espacement, vous pouvez utiliser

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

Ou comme @Ashwini Chaudhary l'a suggéré dans les commentaires , vous pouvez utiliser

print(data.splitlines())
thefourtheye
la source
Juste pour une utilisation plus sûre .splitlines, que se passe-t-il si les cordes ont des espaces, etc.
Ashwini Chaudhary
@AshwiniChaudhary Yup, c'est pourquoi j'ai suggéré split("\n"). Est-ce splitlinesmieux que .split("\n")?
thefourtheye
4
Cela fonctionnera également pour d' \r\nautres types de limites de ligne.
Ashwini Chaudhary
Si votre chaîne se termine par un \n, splitlines()l'ignorera tandis split("\n")qu'une chaîne vide supplémentaire sera ajoutée ""à la fin du résultat.
Moberg
10

Si vous souhaitez fractionner uniquement par sauts de ligne , il est préférable d'utiliser les lignes de fractionnement () :

Exemple:

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

Avec split () ça marche aussi:

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

Toutefois:

>>> data = """
... a, eqw, qwe
... v, ewr, err
... """
>>> data
'\na, eqw, qwe\nv, ewr, err\n'
>>> data.split()
['a,', 'eqw,', 'qwe', 'v,', 'ewr,', 'err']
KiraLT
la source
semble étrange que vous n'ayez pas à passer le personnage pour se séparer comme data.split('\n')?
7

Il existe une méthode spécifiquement à cet effet:

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

Voici:

>>> 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']
>>> 
Jeux Brainiac
la source