Розділити рядок, використовуючи роздільник нового рядка з Python


101

Мені потрібно розмежувати рядок, в якому є новий рядок. Як я цього досягти? Будь ласка, зверніться до коду нижче.

Вхід:

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)?
Ашвіні Шадхарі

Відповіді:


187

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

6
Одна зручна частина про str.splitlinesте, що вона видалить остаточну, \nякщо її теперішня. Тобто, 'foo\nbar\n'.split() == ['foo', 'bar', '']покиstr.splitlines('foo\nbar\n') == ['foo', 'bar']
Метью Мойсен

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, що робити, якщо на струнах є пробіли тощо
Ешвіні Шодхарі,

@AshwiniChaudhary Yup, саме тому я запропонував split("\n"). Є чи splitlinesкраще .split("\n")?
thefourtheye

4
Він буде працювати \r\nі для інших типів меж ліній.
Ashwini Chaudhary

Якщо ваш рядок закінчується на a \n, він splitlines()буде ігнорувати його, а в кінці результату split("\n")буде мати додатковий порожній рядок "".
Моберг

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

З split () він також працює:

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

здається дивним, що вам не доведеться передавати персонажа, щоб поділити його на зразок data.split('\n')?

7

Для цього існує метод спеціально:

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

4

Ось вам:

>>> 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']
>>> 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.