Pisahkan string menggunakan pembatas baris baru dengan Python

101

Saya perlu membatasi string yang memiliki baris baru di dalamnya. Bagaimana saya mencapainya? Silakan lihat kode di bawah ini.

Memasukkan:

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

Output yang diinginkan:

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

Saya telah mencoba pendekatan di bawah ini:

1. output = data.split('\n')
2. output = data.split('/n')
3. output = data.rstrip().split('\n')
Hariharan
sumber
1
Apa keluaran dari repr(data)?
Ashwini Chaudhary

Jawaban:

187

str.splitlines Metode harus memberi Anda persis seperti itu.

>>> 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
sumber
6
Salah satu bagian yang nyaman str.splitlinesadalah bahwa ia akan menghapus final \njika ada. Yaitu, 'foo\nbar\n'.split() == ['foo', 'bar', '']sementarastr.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, secara default, dipisahkan menurut semua karakter spasi. Jika string sebenarnya memiliki karakter spasi putih lain, Anda mungkin ingin menggunakan

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

Atau seperti yang disarankan @Ashwini Chaudhary di komentar , Anda dapat menggunakan

print(data.splitlines())
thefourtheye
sumber
Hanya untuk berada di sisi penggunaan yang lebih aman .splitlines, bagaimana jika string memiliki spasi, dll.
Ashwini Chaudhary
@AshwiniChaudhary Yup, makanya saya sarankan split("\n"). Apakah splitlineslebih baik dari .split("\n")?
thefourtheye
4
Ini akan berfungsi untuk \r\ndan jenis batas garis lainnya juga.
Ashwini Chaudhary
Jika string Anda diakhiri dengan a \n, splitlines()akan mengabaikannya sementara split("\n")akan memiliki string kosong tambahan ""di akhir hasil.
Moberg
10

Jika Anda ingin membagi hanya dengan garis baru , lebih baik menggunakan garis terpisah () :

Contoh:

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

Dengan split () ini juga berfungsi:

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

Namun:

>>> data = """
... a, eqw, qwe
... v, ewr, err
... """
>>> data
'\na, eqw, qwe\nv, ewr, err\n'
>>> data.split()
['a,', 'eqw,', 'qwe', 'v,', 'ewr,', 'err']
KiraLT
sumber
Tampaknya aneh bahwa Anda tidak harus melewatkan karakter untuk dipisahkan seperti data.split('\n')?
7

Ada metode khusus untuk tujuan ini:

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

Ini dia:

>>> 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']
>>> 
Game Jenius
sumber