Найти ключевое слово и перебрать файл, чтобы найти следующее ключевое слово - PullRequest
0 голосов
/ 04 апреля 2019

Я ищу файл по определенному ключевому слову. Оттуда я хочу найти в предыдущих строках дополнительное ключевое слово. Пример: поиск текста по «источнику». Затем найдите в предыдущих 15 строках текста ключевое слово «назначение». Проблема в том, что второе ключевое слово появляется в диапазоне 15-20 строк от первого ключевого слова, поэтому я не могу просто поместить строки [i-15], потому что оно не будет возвращать один и тот же результат для каждого случая нахождения ключевого слова. "источник".

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

Первая попытка ...

   keyword_2 ="destination
   j = 
   if re.match(keyword_1, line):
                lineafter = lines[i + j]
                lineafter_split= lineafter.split(' ')

            if value2 and cell_value in line:
                if 'access-list' not in line:
                    if 'nat' not in line:
                        lineafter_2 = lines[i + 1]
                        if 'description' not in lineafter_2:
                            print(lineafter_2)




Second attempt ...
```keyword_1 ="source"
   keyword_2 ="destination
   j=1
   for i, line in enumerate(lines):
       if keyword_1 in line:
          prev_line=lines[i - j]
           for i in range(1,15):
               if w in prev_line:
                   print(prev_line)
               else:j= j+1

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

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

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

def looking_for_keywords(lines, keyword_1, keyword_2, range = None):
    for i,line in enumerate(lines):
        if keyword_1 in line:
            j=0
            max = range if range else i
            not_found = True
            while j<max and not_found:
                j+=1 
                not_found = not(keyword_2 in lines[i-j])
            if not_found:
                print('Not Found')
            else:
                print(f'Found first at {i} and second at {i-j}')

Обратите внимание, что ваш ответ не даст того же результата и будет вести себя странно, если i <3

0 голосов
/ 04 апреля 2019

Похоже, я нашел ответ на тот случай, если у кого-то еще возникнет такая же проблема.

    for i, line in enumerate(lines):
        if keyword_1 in line:
            prev_line=lines[i - 1]
            for k in range(1,3):
                j=k
                prev_line=lines[i - j]
                print(prev_line)
 #Then search for keyword_2
...