2016-05-09 4 views
3

Я пытаюсь извлечь некоторую информацию из строки текста из файла журнала, в строке есть несколько нечетных разделителей, которые я могу обойти с помощью split/replace/join и т. д.Как разбить элемент списка python без создания подсписок

Проблема возникает, когда я пытаюсь разделить второй элемент времени на «-» и добавить его обратно в список, в итоге получим подсписку - это не то, что я хочу.

line='2016-05-06T12:00:00.128189+01:00 mac-68c90b45b51e debug: 03959725-10:59:57.250[51222]*** NEW STATUS [3896374] : id=15 object=1 row=00408280 speed=0 crit=2 cell=130 intracell=512' 

line1=(" ".join(line.split()).replace('[', '.').replace(']', ' ').strip().split()) 

Результаты;

['2016-05-06T12:00:00.128189+01:00', 'mac-68c90b45b51e', 'debug:', 03959725-10:59:57.250.51222', '***', 'NEW', 'STATUS', '.3896374', ':', 'id=15', 'object=1', 'row=00408280', 'speed=0', 'crit=2', 'cell=130', 'intracell=512'] 

Когда я затем попытаться разбить '03959725-10: 59: 57.250.51222' с

line1[3]=line1[3].replace('-', ' ').split() 

Я в конечном итоге;

['2016-05-06T12:00:00.128189+01:00', 'mac-68c90b45b51e', 'debug:', ['03959725', '10:59:57.250.51222'], '***', 'NEW', 'STATUS', '.3896374', ':', 'id=15', 'object=1', 'row=00408280', 'speed=0', 'crit=2', 'cell=130', 'intracell=512'] 

Что я хочу:

['2016-05-06T12:00:00.128189+01:00', 'mac-68c90b45b51e', 'debug:', '03959725', '10:59:57.250.51222', '***', 'NEW', 'STATUS', '.3896374', ':', 'id=15', 'object=1', 'row=00408280', 'speed=0', 'crit=2', 'cell=130', 'intracell=512'] 

Любые идеи о том, как убирать способ, как я это делаю?

ответ

3

Вы можете использовать назначение ломтика:

line1[3:4]=line1[3].replace('-', ' ').split() 

Он заменит кусочек с заданной последовательностью:

>>> l = [1, 2, 3, 4, 5] 
>>> l[3:4] = ['new', 'items'] 
>>> l 
[1, 2, 3, 'new', 'items', 5] 
+0

Не заменит ли он линию1 [4]? –

+2

@MuhammadTahir: Нет. 'Line1 [4]' не входит в срез. – user2357112

+0

Такой простой ответ показывает, что мне нужно многому научиться, спасибо за вашу помощь, решение отлично работает. –

0

Реконструировать список вроде этого:

line1 = line1[0:3] + line1[3].replace('-', ' ').split() + line1[4:] 
1

Если у вас есть Python3 .5, есть и этот интересный способ:

>>> a = [0, 1, 2, 'hello world whats up?', 4, 5] 
>>> n = 3 
>>> [*a[:n], *a[n].split(), *a[n+1:]] 
[0, 1, 2, 'hello', 'world', 'whats', 'up?', 4, 5] 
Смежные вопросы