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.