Раскол до появления времени / появления определенного формата символов - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть очень большая строка данных в следующем формате, который я пытаюсь разбить на Python:

05:38:14.01  M654  P15-17  Tnow  32  PyQ  64  Times  67  49  6005:38:14.01  M654  P15-17   Tnow  60  PyQ  64  Times  55  4405:38:14.01  M654  P15-17   Tnow   8  PyQ  64  Times  26  1505:38:14.01  M654  P15-17   Tnow  60  PyQ  64  Times  54  4505:38:14.01  M654  P15-17   Tnow   8  PyQ  64  Times  37   1  2005:38:14.01  M654  P15-17   Tnow  28  Ncyt  64  Times  55  44

: являются частью времени (например, 05:38:14) но два числа до времени относятся к предыдущей строке данных. Поэтому я хочу иметь возможность разбить строку раньше времени, чтобы она выглядела следующим образом:

05:38:14.01  M654  P15-17  Tnow  32  PyQ  64  Times  67  49  60

05:38:14.01  M654  P15-17   Tnow  60  PyQ  64  Times  55  44

05:38:14.01  M654  P15-17   Tnow   8  PyQ  64  Times  26  15

05:38:14.01  M654  P15-17   Tnow  60  PyQ  64  Times  54  45

05:38:14.01  M654  P15-17   Tnow   8  PyQ  64  Times  37   1  20

05:38:14.01  M654  P15-17   Tnow  28  Ncyt  64  Times  55  44

et c.

Я пробовал разбивать ее каждые n количество символов, но каждая строка имеет различное число.

Кроме того, числа, на которые я хочу разделить его, различаются по всему набору данных по мере изменения времени.

1 Ответ

0 голосов
/ 24 апреля 2020

Попробуйте это

parts = [x for x in re.compile('([\d]{2}:[\d]{2}:[\d]{2}.[\d]{2})').split(s) if x]

Output
['05:38:14.01',
 ' M654 P15-17 Tnow 32 PyQ 64 Times 67 49 60',
 '05:38:14.01',
 ' M654 P15-17 Tnow 60 PyQ 64 Times 55 44',
 '05:38:14.01',
 ' M654 P15-17 Tnow 8 PyQ 64 Times 26 15',
 '05:38:14.01',
 ' M654 P15-17 Tnow 60 PyQ 64 Times 54 45',
 '05:38:14.01',
 ' M654 P15-17 Tnow 8 PyQ 64 Times 37 1 20',
 '05:38:14.01',
 ' M654 P15-17 Tnow 28 Ncyt 64 Times 55 44']

Это будет разделяться при каждом появлении регулярного выражения, соответствующего метке времени, где s - ваша строка.

Затем попарно объедините элемент метки времени в списке с помощью текстовый элемент.

strings = ["".join(parts[i] + parts[i+1]) for i in range(len(parts) - 1)[::2]]

Output
['05:38:14.01 M654 P15-17 Tnow 32 PyQ 64 Times 67 49 60',
 '05:38:14.01 M654 P15-17 Tnow 60 PyQ 64 Times 55 44',
 '05:38:14.01 M654 P15-17 Tnow 8 PyQ 64 Times 26 15',
 '05:38:14.01 M654 P15-17 Tnow 60 PyQ 64 Times 54 45',
 '05:38:14.01 M654 P15-17 Tnow 8 PyQ 64 Times 37 1 20',
 '05:38:14.01 M654 P15-17 Tnow 28 Ncyt 64 Times 55 44']

Может быть решение oneliner с более сложным регулярным выражением. Я не силен в регулярных выражениях извините.

...