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

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

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())

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

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

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']
>>> 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.