แยกสตริงโดยใช้ตัวคั่นขึ้นบรรทัดใหม่ด้วย Python


109

ฉันต้องการคั่นสตริงที่มีบรรทัดใหม่อยู่ ฉันจะบรรลุมันได้อย่างไร? โปรดดูรหัสด้านล่าง

อินพุต:

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

ผลลัพธ์ที่ต้องการ:

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

ฉันได้ลองวิธีการด้านล่างแล้ว:

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

1
ผลลัพธ์repr(data)คืออะไร?
Ashwini Chaudhary

คำตอบ:


202

str.splitlines วิธีการควรให้ตรงกับที่

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

7
ส่วนหนึ่งที่สะดวกstr.splitlinesคือมันจะลบขั้นสุดท้าย\nหากมีอยู่ คือ'foo\nbar\n'.split() == ['foo', 'bar', '']ในขณะที่str.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โดยค่าเริ่มต้นจะแบ่งตามอักขระช่องว่างทั้งหมด หากสตริงจริงมีอักขระเว้นวรรคอื่นคุณอาจต้องใช้

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

หรือตามที่@Ashwini Chaudhary แนะนำในความคิดเห็นคุณสามารถใช้ได้

print(data.splitlines())

เพื่อความปลอดภัยในการใช้งานจะ.splitlinesเกิดอะไรขึ้นถ้าสายมีช่องว่าง ฯลฯ
Ashwini Chaudhary

@AshwiniChaudhary Yup split("\n")นั่นคือเหตุผลที่ผมแนะนำ จะsplitlinesดีกว่า.split("\n")ไหม?
thefourtheye

4
มันจะใช้งานได้\r\nและขอบเขตของเส้นประเภทอื่น ๆ ด้วย
Ashwini Chaudhary

ถ้าข้อความของคุณสิ้นสุดลงใน\n, splitlines()จะไม่สนใจมันในขณะที่split("\n")จะมีสตริงว่างเพิ่มเติม""ในตอนท้ายของผล
Moberg

10

หากคุณต้องการแยกตามบรรทัดใหม่เท่านั้นควรใช้Splitlines () :

ตัวอย่าง:

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

ด้วยการแยก () มันใช้งานได้:

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

อย่างไรก็ตาม:

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

2
ดูเหมือนแปลกที่คุณไม่ต้องส่งตัวละครเพื่อแยกตามชอบdata.split('\n')?


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.