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

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

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

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

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

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']
>>> 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.