Поиск конкретного объекта за другим - PullRequest
0 голосов
/ 28 мая 2018

Я создаю программу, которая извлекает соответствующую информацию из текстового файла с 500k строками.

До сих пор мне удавалось взять информацию из текстового файла и превратить ее в список, каждый элементбыть линией

Соответствующий текст форматируется следующим образом:

*A title that informs that the following section will have the data I'm trying to extract *

*Valuable info in random amount of lines*

*-------------------*

и между каждым соответствующим разделом информации, форматируется таким же образом, но начинается с другого заголовка, например:

*A title that shows that this is data I don't want *

*Non-valuable info in random amount of lines *

*------------------- *

Мне удалось перечислить индексы начальной точки с помощью следующего кода:

start = [i for i, x in enumerate(lines) if x[0:4] == searchObject1 and x[5:8] == searchObject2]

Но я изо всех сил пытаюсь найти точки остановки.Я не могу использовать тот же метод, который использовался при поиске начальных точек, потому что линия остановки появляется и после не важной информации.

Я довольно новичок и в Python, и в программировании, поэтому решение может быть очевидным.

1 Ответ

0 голосов
/ 28 мая 2018

Простое решение состоит в том, чтобы построчно перебирать входной файл и сохранять только ценные строки.Чтобы узнать, является ли строка полезной, мы используем логическую переменную, которая:

  • устанавливается в значение true ("держать линии") всякий раз, когда мы встречаем заголовок, отмечающий начало раздела интересных данных,
  • устанавливается в false («отбрасывать строки») всякий раз, когда мы сталкиваемся с меткой конца раздела. Переменная установлена ​​на сброс, даже когда мы сталкиваемся с концом бесполезного раздела, который не меняет своего состояния.

Вот код (lines - этосписок строк, содержащих данные для анализа):

bool keep = false;
data = []

for line in lines:
    if line == <title of useful section> # Adapt
        keep = true
    elif line == <end of section> # Adapt
        keep = false
    else:
        if keep:
            data.append(line)

Если ни один из случаев не совпадает, строка была одной из двух:

  • строка данных в бесполезнойsection
  • заголовок бесполезного раздела

Таким образом, его можно удалить.

Обратите внимание, что заголовки и конец строк раздела не сохраняются.

...