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.