2014-09-26 3 views
0

Мне нужно найти файл отладки для определенной строки или ошибки, а затем, как только она будет найдена, найдите файл по 6 строкам и затем распечатайте все, что имеет эта строка 6 выше. в этом.Python - Файлы - Изменение номеров строк на основе результатов поиска

import linecache 

file = "/file.txt" 
fh = open("/file.txt", "r") 
lookup = 'No Output' 

with fh as myFile: 
    for num, line in enumerate(myFile, 1): 
     if lookup in line: 
      numUp = num + 6 
      new = linecache.getline(file, numUp)   
      print new 

Я пытался добавить что-то делать по линии «Num + = 6» всякий раз, когда я нахожу «Термин мне нужно искать», но мой выход пустым или я получаю эту ошибку:

File "testRead.py", line 12 
    print new 
    ^
IndentationError: unexpected indent 

Если есть еще один способ выполнить «поиск», затем сканировать n-строки, затем распечатать/вернуть »таким образом, что это строка за строкой, что было бы прекрасно знать, потому что файлы, которые я буду работать с сильно различаются по размеру.

Я увеличил пример файла некоторых из вещей, которые я обычно вижу: http://pastebin.com/mzvCfZid Любой раз, когда я попал в строку «(Err: Нет Output)», мне нужно найти связанный с ним идентификатор, который является номером 6 строк выше Ошибка. Так что «вывод не то, что мне нужно искать

:: Edit ::

+0

Как представлено здесь, отступы исправить и запустить код. Проверьте исходный файл: у вас могут быть смешанные пробелы и табы или какая-то такая тонкая проблема с форматом. Однако код не генерирует выход, поскольку строка 'num + 6' пуста в' file.txt'. Я подозреваю, что вам может понадобиться строка 'num + 5'. – John1024

ответ

0

Вы хотите функциональность deque:.

>>> from collections import deque 
>>> 
>>> lines = deque(maxlen = 7) 
>>> for i in range(35): 
... lines.append(i) 
... 
>>> print lines 
# Note your 6 lines earlier would be lines[0] here. 
deque([28, 29, 30, 31, 32, 33, 34], maxlen=7)