Tách chuỗi bằng cách sử dụng dấu phân cách dòng mới với Python


101

Tôi cần phải phân tách chuỗi có dòng mới trong đó. Làm thế nào tôi sẽ đạt được nó? Vui lòng tham khảo mã bên dưới.

Đầu vào:

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

Đầu ra mong muốn:

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

Tôi đã thử các cách tiếp cận dưới đây:

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

1
Đầu ra của là repr(data)gì?
Ashwini Chaudhary

Câu trả lời:


187

str.splitlines phương pháp sẽ cung cấp cho bạn chính xác điều đó.

>>> 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
Một phần thuận tiện str.splitlineslà nó sẽ loại bỏ cuối cùng \nnếu hiện tại của nó. Tức là, 'foo\nbar\n'.split() == ['foo', 'bar', '']trong khistr.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, theo mặc định, phân chia theo tất cả các ký tự khoảng trắng. Nếu chuỗi thực tế có bất kỳ ký tự khoảng trắng nào khác, bạn có thể muốn sử dụng

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

Hoặc như @Ashwini Chaudhary đã đề xuất trong các nhận xét , bạn có thể sử dụng

print(data.splitlines())

Chỉ để được về việc sử dụng phụ an toàn hơn .splitlines, những gì nếu chuỗi có không gian vv
Ashwini Chaudhary

@AshwiniChaudhary Yup, đó là lý do tại sao tôi đề xuất split("\n"). Là splitlinestốt hơn .split("\n")?
thefourtheye

4
Nó cũng sẽ hoạt động cho \r\nvà các loại đường ranh giới khác.
Ashwini Chaudhary

Nếu chuỗi của bạn kết thúc bằng a \n, splitlines()sẽ bỏ qua nó trong khi split("\n")sẽ có thêm một chuỗi trống ""ở cuối kết quả.
Moberg

10

Nếu bạn chỉ muốn chia theo dòng mới , tốt hơn nên sử dụng splitlines () :

Thí dụ:

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

Với split (), nó cũng hoạt động:

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

Tuy nhiên:

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

có vẻ lạ là bạn không phải truyền ký tự để chia theo like data.split('\n')?

7

Có một phương pháp cụ thể cho mục đích này:

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

4

Của bạn đây:

>>> 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']
>>> 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.