Python: выберите определенную строку из текста

я пытаюсь сделать код, который:

  • открыть текстовый файл
  • перейти к строкам, начинающимся с «Старт»
  • перейти к строке 3 из строк, начинающихся с "start" (выбранных ранее)
  • проверьте, содержит ли эта строка слово "содержит"

если да = напечатайте "хорошо":

str1 = "Start"

with open("C:...test.txt") as file:
for line in file:
    if str1 in line:
        if "contain" in line:
            print "OK"
        else:
            print "NOK"

мне нужно интегрировать условие "3-я линия"


person Mehdi ouahabi    schedule 17.08.2015    source источник
comment
вы можете добавить переменную счетчика   -  person Abhyudit Jain    schedule 17.08.2015


Ответы (4)


Для лучшего использования памяти вы можете использовать enumerate для отслеживания номеров строк:

str1 = "Start"
fp = open("C:...test.txt")
check = 0
for i,line in enumerate(fp):
    if str1 in line:
        check = i
        continue
    if "contain" in line and (i == check + 3):
        print "OK"
    else:
        print "NOK"

Здесь i == check + 3 condition проверит ваше условие 3-й строки.

person Deep Shah    schedule 17.08.2015
comment
У этого есть недостаток: предположим следующее: строки 1, 2 содержат Start, строка 4 содержит contain, этот метод будет miss. - person luoluo; 18.08.2015
comment
У меня сработало с некоторыми изменениями + Советы от @zineb.l - person Mehdi ouahabi; 21.08.2015

Могут быть небольшие накладные расходы, но если ваш файл не слишком велик, я бы просто выгрузил каждую строку в списке L, а затем просмотрел этот список - если строка r начинается с str1, вы можете просто сделать L[r+3] и проверьте, содержит ли он «содержать».

person alex314159    schedule 17.08.2015
comment
файл около 1мб; и меньшее использование памяти/кэша = тем лучше скрипт. - person Mehdi ouahabi; 17.08.2015

Используйте два списка для хранения позиций, соответствующих вашему правилу.

Затем проверьте, соответствует ли положение вашему относительному смещению.

start_lines = []
contains_lines = []
with open("C:...test.txt") as inp:
    line_num = 0
    for line in inp:
        if line.startswith("start"):
            start_lines.append(line_num)

        if "contains" in line:
            contains_lines.append(line_num)

        line_num += 1

print [line_num for line_num in contains_lines if line_num - 3 in start_line]
person luoluo    schedule 17.08.2015

@Mehdi ouahabi, вы предложили «перейти к строке, которая начинается с Start», поэтому мы проверяем только те строки, которые начинаются с «Start», а не те, которые содержат Начать в середине или в конце :

with open("test.txt") as file:
    for line in file:
        if line.startswith("Start"): #instead of "str1 in line" 
            if "contain" in line: print "OK"
            else: print "NOK"

*** РЕДАКТИРОВАТЬ: *** в этом случае вы проверите, содержит ли начало строки/сегодняшнюю дату

from datetime import date
with open("test.txt") as file:
    for line in file:
       #if str(date.today()) in line:#check if today's date exist in the line
       if line.startswith(str(date.today())): #check if the line start with today's dates
            if "contain" in line: print "OK"
            else: print "NOK"
person ْزَيْنَب    schedule 17.08.2015
comment
Спасибо за идею... если мы хотим проверить сегодняшнюю дату в начале строки... это будет похоже на datetime.date.today(), будет ли это работать? я пытался использовать его с строкой if в datetime... но это не сработало - person Mehdi ouahabi; 18.08.2015
comment
не могли бы вы уточнить, вы хотите проверить наличие некоторых дат в начале строк? или просто сегодняшняя дата - person ْزَيْنَب; 18.08.2015
comment
@Mehdiouahabi я редактирую ответ, чтобы проверить, начинается ли строка / содержит ли сегодняшнюю дату - person ْزَيْنَب; 18.08.2015
comment
Это мне очень помогло, спасибо, Зинеб. - person Mehdi ouahabi; 21.08.2015