Создание списка фрагментов другого списка путем получения элементов между заданными индексами - PullRequest
0 голосов
/ 05 июня 2019

Я анализирую вывод последовательного анализатора и хочу посчитать количество байтов между следующими временными метками. Я превратил свой журнал в список строк lines, и это выглядит примерно так:

отметка времени (индекс 0)

данные (индекс 1)

данные (индекс 2)

и т. Д.

отметка времени (индекс 215)

данные (индекс 216)

и так далее ...

Итак, я хочу создать вложенный список messages, например, его первый элемент messages[0] будет элементом lines от индекса 1 до индекса 214.

Я создал список timeindexes индексов временных меток и отдельный список nospaces, где я избавился от пробелов между символами в элементах между временными метками - при подсчете байтов я просто разделю количество символов на 2.

f=open("snnifflog.txt","r")
lines=[l.strip() for l in f.readlines()]
lines_number=len(lines)

l=0
timeindex=[]
# list of indexes of timestamps in my lines list
while l<lines_number:
    if lines[l].startswith("2019"):
        timeindex.append(l)
    l+=1

nospaces=[]
n=0
#lines list modified by getting rid of spaces
while n<lines_number:
    if not lines[n].startswith("2019"):
        nospaces.append(lines[n].replace(" ",""))
    else:
        nospaces.append(lines[n])
    n+=1

А теперь я не знаю, как добавить свой список. Я понимаю, что это строки должны быть проиндексированы от 0 до len(timeindex)-2, и они должны быть списками, состоящими из элементов:

нулевой ряд:

nospaces[timeindex[0]+1] до nospaces[timeindex[1]-1]

затем строка 1:

nospaces[timeindex[1]+1] до nospaces[timeindex[2]-1]

и так далее ...

Я не знаю, как написать цикл для этого

1 Ответ

0 голосов
/ 05 июня 2019

Вот точно то, что вы описали в своем вопросе, и я понятия не имею, что вы делаете и зачем вам это нужно.

with open("snnifflog.txt") as f:
    lines = f.read().splitlines()

timeindex = [i for i in range(len(lines)) if lines[i].startswith("2019")]
nospaces = [s.replace(" ", "") if i not in timeindex else s for i, s in enumerate(lines)]
messages = [nospaces[timeindex[i] + 1: timeindex[i + 1]] for i in range(len(timeindex) - 2)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...