Как я могу разобрать строку по новым строкам и двоеточиям? - PullRequest
1 голос
/ 18 ноября 2011

У меня есть текст вроде this . Я хочу разделить на New Line и Colons. Прямо сейчас я делю на New Lines. Я использую этот код.

`data= data.split('\n')

и его выдача странный вывод . Можете ли вы помочь? спасибо

Ответы [ 5 ]

8 голосов
/ 18 ноября 2011

\ t - вкладки.Чтобы немного почистить вещи, попробуйте следующее:

data = [line.strip().split(':') for line in data.split('\n') if line.strip()]

удалит пустые строки и уберет пробелы

7 голосов
/ 18 ноября 2011

Он делает только то, что вы просите, но он полон вкладок.Удалите вкладки с помощью strip():

lines = data.split('\n')
lines = [line.strip() for line in lines]

, и вы увидите что-то более похожее на то, что ожидаете.

Это все равно оставит пустые строки, так что, возможно, вы захотитераздеть их тоже:

lines = filter(None, lines)
3 голосов
/ 18 ноября 2011

Чем ваш вывод странный?Я имею в виду, есть много таблиц \t и пробелов, но не могли бы вы объяснить, что не соответствует вашим потребностям?

Может быть, вы могли бы .strip() строк в первую очередь: это удалит пробелы.

0 голосов
/ 18 ноября 2011

Это должно сработать

data = list(
    line.strip().split(":") for line in data.split("\n")
)

data = filter(None, data)

РЕДАКТИРОВАТЬ: ответ Саймона даст тот же результат, будучи "более чистым" решением.

data = list(
    line.strip().split(":") for line in data.split("\n") if line.strip()
)
0 голосов
/ 18 ноября 2011

Метод str.split () принимает только один разделитель.Это исключает разбиение на двоеточие или перевод строки.Вы можете преодолеть это ограничение с помощью чего-то вроде:

data = data.replace(':', '\n').split('\n')   # split on newlines and colons

Вы также можете попробовать функцию re.split () для более точного контроля разделения:

>>> import re
>>> s = 'abc:def\nghi'
>>> re.split(r'\:|\n', s)
['abc', 'def', 'ghi']
...