python: использование списка ключевых слов для поиска в txt-файле

Я новичок в python и im пытается искать через txt-файл, используя ключевые слова из другого txt-файла.
Мой код выглядит так до сих пор:

testfile=open('D:Codingtestfile.txt')
keywordfile=open('D:Codingkeyword.txt')

testfile.seek(0,0)
keywordfile.seek(0,0)
for keyword in keywordfile:
    print('n****************nlooking for: ', keyword)
    testfile.seek(0,0)
    for line in testfile:
            if keyword in line:
                print('keyword: ', keyword)
                print('line: ', line)

Ключевое слово.txt содержит следующее:

quick
fox
jumps

И testfile.txt содержит следующее:

the quick 
brown fox jumps 
over the lazy dog
near the river banks

Предполагается найти каждое ключевое слово в tesfile.txt и распечатать его, однако при запуске выше кода у меня есть следующие результаты:

****************
looking for:  quick


****************
looking for:  fox


****************
looking for:  jumps
keyword:  jumps
line:  brown fox jumps 

Он не находит первые два ключевых слова, а вместо этого находит только последний.

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

Спасибо!

4 ответа

  1. Я думаю, что у вас есть проблемы при чтении ключевых слов, он также может содержать \N или \t или \r символ или пробел (‘ ‘) в конце. Как насчет использования string.замените, чтобы исключить эту возможность:

     if keyword.replace(' ','').replace('\n','') in line:
    

    или вы также можете использовать строку.strip () в python:

    if keyword.strip(' \t\n\r') in line:
    
  2. Во-первых, я предлагаю вам прочитать файлы один раз и сохранить их в памяти, так что вам не придется перечитывать их каждый раз. Вы можете использовать оператор Python with, поэтому вам не нужно закрывать их после обработки.

    with open("testfile.txt", "r") as f:
        testfile = f.readlines()
    
    with open("keywords.txt", "r") as f: 
        keywords = f.readlines() 
    

    Затем ошибка в коде заключается в том, что строки в файле могут содержать символ \nновой строки или пробелы ' '. Python имеет удобную функцию для решения этой проблемы: strip(). Вот код цикла:

    for keyword in keywords:             
        kw = keyword.strip()     
        print('\n***********\nlooking for: ', kw)
        for line in testfile:
            if kw in line:
                print('keyword: ', kw)
                print('line: ', line)
    
  3. Думал об этом с макушки головы

    lines1 = testfile.readlines()
    lines2 = keywordfile.readlineS()
    
    searchList = []
    
    for line in line2:
        lineSplit = line.split(" ")
        for item in lineSplit:
            searchList.append(item)
    
    for item in searchList:
        for line in line1:
            if item in line:
                print(line)
    
  4. Вы можете сделать что-то вроде этого:

    from itertools import cycle
    
    with open('test_file','r') as tf, open('keyword_file', 'r') as kf:
        keywords = [k.strip() for k in kf]
        for lineno, line in enumerate(tf):
            for i, key in enumerate(cycle(keywords)):
                if i==len(keywords):
                    break
                if key in line.strip():
                    print "Keyword: '"+key+"' found on line: "+str(lineno)
    

    Выход:

    Keyword: 'quick' found on line: 0
    Keyword: 'fox' found on line: 1
    Keyword: 'jumps' found on line: 1