Python ile yeni satır sınırlayıcı kullanarak dizeyi bölme


101

İçinde yeni satır olan dizeyi sınırlandırmam gerekiyor. Bunu nasıl başarabilirim? Lütfen aşağıdaki koda bakın.

Giriş:

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

İstenen çıktı:

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

Aşağıdaki yaklaşımları denedim:

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

1
Çıktısı nedir repr(data)?
Ashwini Chaudhary

Yanıtlar:


187

str.splitlines yöntem size tam olarak bunu vermelidir.

>>> 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
str.splitlinesBununla ilgili uygun bir kısım , \neğer varsa finali kaldıracak olmasıdır . Yani, 'foo\nbar\n'.split() == ['foo', 'bar', '']sürestr.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.splitvarsayılan olarak tüm boşluk karakterlerine böler. Gerçek dizede başka boşluk karakterleri varsa, kullanmak isteyebilirsiniz

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

Veya yorumlarda @Ashwini Chaudhary'nin önerdiği gibi , kullanabilirsiniz

print(data.splitlines())

Sadece daha güvenli bir kullanım için .splitlines, ya dizelerde boşluklar varsa, vb.
Ashwini Chaudhary

@AshwiniChaudhary Yup, bu yüzden önerdim split("\n"). Mı splitlinesdaha iyi .split("\n")?
thefourtheye

4
Bu \r\nve diğer türdeki çizgi sınırları için de çalışacaktır .
Ashwini Chaudhary

Dizeniz bir ile bitiyorsa \n, splitlines()onu yok sayacak ve sonucun sonunda split("\n")ek bir boş dizge olacaktır "".
Moberg

10

Yalnızca satırsonu satırlarına göre bölmek istiyorsanız, bölme satırlarını () kullanmak daha iyidir :

Misal:

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

Split () ile de çalışır:

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

Ancak:

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

karaktere göre bölmek zorunda olmaman garip görünüyor data.split('\n')?

7

Özellikle bu amaç için bir yöntem var:

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

4

Hadi bakalım:

>>> 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']
>>> 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.