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')
Hariharan
źródło
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']
wim
źródło
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())
na czworo
źródło
Ż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']
KiraLT
źródło
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']
pajton
źródło
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']
>>> 
Gry Brainiac
źródło