Podziel ciąg przy użyciu separatora nowej linii w Pythonie


101

Muszę oddzielić ciąg, który zawiera nowy wiersz. Jak mam to osiągnąć? Proszę zapoznać się z poniższym kodem.

Wejście:

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

Wymagane wyjście:

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

Wypróbowałem poniższe podejścia:

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

1
Jaki jest wynik repr(data)?
Ashwini Chaudhary

Odpowiedzi:


187

str.splitlines metoda powinna ci to dać.

>>> 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
Jedną wygodną częścią str.splitlinesjest to, że usunie finał, \njeśli jest obecny. Tzn., 'foo\nbar\n'.split() == ['foo', 'bar', '']Podczas gdystr.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, domyślnie dzieli się na wszystkie białe znaki. Jeśli rzeczywisty ciąg ma inne białe znaki, możesz użyć

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

Lub, jak zasugerował @Ashwini Chaudhary w komentarzach , możesz użyć

print(data.splitlines())

Żeby być po bezpieczniejszej stronie .splitlines, co jeśli struny mają spacje itp.
Ashwini Chaudhary

@AshwiniChaudhary Tak, dlatego zasugerowałem split("\n"). Jest splitlineslepsze niż .split("\n")?
thefourtheye

4
Będzie działać również dla \r\ninnych typów granic linii.
Ashwini Chaudhary

Jeśli twój ciąg kończy się na \n, splitlines()zignoruje go, podczas gdy split("\n")będzie miał dodatkowy pusty ciąg ""na końcu wyniku.
Moberg

10

Jeśli chcesz dzielić tylko przez nowe linie , lepiej jest użyć podzielonych linii () :

Przykład:

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

Z split () działa również:

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

Jednak:

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

wydaje się dziwne, że nie musisz przekazywać postaci, aby się rozdzielić data.split('\n')?

7

Istnieje metoda specjalnie do tego celu:

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

4

Proszę bardzo:

>>> 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']
>>> 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.