я хочу найти в файле три строки и ввести "дефект", только если обе строки присутствуют

У меня есть txt-файл с тремя сигнатурами отладки, присутствующими на них.

x = 'task cocaLc Requested reboot'
y = 'memPartFree'
z = 'memPartAlloc'

import re
f = open('testfile.txt','r')
searchstrings = ('task cocaLc Requested reboot', 'memPartFree',     'memPartAlloc')
for line in f():
    for word in searchstrings:
        if any (s in line for s in searchstrings):
            print 'defect'

Я хочу создать короткий скрипт для сканирования файла и печати ‘дефекта’ только при наличии всех этих трех строк.
Я пытался создавать разными способами, но не смог выполнить требование.

1 ответ

  1. Во-первых, есть небольшая ошибка в строке 4 примера кода. fне вызывается, и поэтому вы не должны использовать скобки рядом с ним.

    Если у вас есть файл со следующим в нем:

    task cocaLc Requested reboot
    memPartFree
    memPartAlloc
    

    Он распечатает «дефект» 9 раз, потому что вы проверяете один раз для каждой строки и один раз для каждой строки поиска. Итак, три строки, умноженные на три строки поиска-это 9.

    any()Функция возвращает True любое время, когда файл содержит хотя бы одну из заданных строк поиска. Таким образом, этот код выведет «дефект» один раз для каждой строки, умноженный на количество строк поиска, которые вы определили.

    Чтобы решить эту проблему, программа должна знать, если/когда были обнаружены какие-либо конкретные строки поиска. Вы можете сделать что-то вроде этого:

    f = open('testfile.txt','r')
    
    searchstrings = ['task cocaLc Requested reboot', 'memPartFree', 'memPartAlloc']
    detections = [False, False, False]
    
    for line in f:
        for i in range(0, len(searchstrings)):
            if searchstrings[i] in line: #loop through searchstrings using index numbers
                detections[i] = True
                break    #break out of the loop since the word has been detected
    
    if all(detections): #if every search string was detected, every value in detections should be true
        print "defect"
    

    В этом коде мы выполняем цикл между строками и строками поиска, но detectionпеременная указывает, какие строки поиска были обнаружены в файле. Таким образом, если allэлементы в этом списке имеют значение true, это означает, что все строки поиска были обнаружены в файле.