Поиск значений в списке из файла

поиск слова в текстовом файле, мне нужно проверить, появляется ли слово в большом количестве файлов. Используя уникальное слово, моя программа работает, я хотел расширить список слов, используя список, однако я не могу заставить его работать.

for name in files:
try:
    with open(name,errors='ignore') as f:
     found = "FALSE"
     pos = 0
     for line in f:
         pos = pos + 1
         if pattern_finder(line):
             found = "TRUE"
             break
     output_file.write (ntpath.basename(f.name) +';' + found + ';' + str(pos)+ ';' + line )
except IOError as exc:
    if exc.errno != errno.EISDIR:
        print("No Files Found")
        raise
output_file.close()



def pattern_finder (file_line):
    for i in range(len(pattern_to_find)):
        word = pattern_to_find[i]
        if word in file_line:
            return True
            break

«Слово» в строке никогда не найдено, конечно, если я просто избегаю использования списка, он работает правильно, т.е. word="WORD_IM_LOOKING" Я считаю, что у меня есть концептуальная проблема о том, как получить значение из списка, чтобы использовать это значение, чтобы увидеть, существует ли оно в list.index. может кто-нибудь посоветовать? )

Ваш опубликованный код не запускается из-за множества отсутствующих определений символов и ошибок отступов. Выходной файл (среди прочего) лишний для вашей задачи. Прежде всего, вы должны включить простую попытку работы со списком целевых слов — этого нет нигде в вашем коде или описании.

Prune 17.01.2019 19:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
40
1

Ответы 1

Для этого вы захотите использовать регулярное выражение, и вы можете использовать str.join для компиляции шаблона чередования регулярных выражений, используя вертикальную черту и ваш список слов. Пример:

import re
from pathlib import Path

def main():
    search_words = ['words', 'one', 'two']
    p = re.compile(r'|'.join(search_words), re.IGNORECASE|re.MULTILINE)
    files_with_words = []
    for file in Path().glob('*.txt'):
        if p.search(file.read_text()):
            files_with_words.append(file.name)
    print(files_with_words)



if __name__ == '__main__':
    main()

Обновлено: обновлено для отображения номера строки, позиции и найденного слова.

import re
from pathlib import Path


def main():
    search_words = ['words', 'one', 'two']
    p = re.compile(fr"\b({'|'.join(search_words)})\b", re.IGNORECASE)
    files_with_words = set()
    for file in Path().glob('*.txt'):
        with open(file.name) as f:
            for i, line in enumerate(f):
                re_search_obj = p.search(line)
                if re_search_obj:
                    print("file = {}, line = {}, pos = {}, word = {}".format(
                        file.name, i, re_search_obj.span(), re_search_obj.group()
                    ))


if __name__ == '__main__':
    main()

Используя регулярное выражение, можно ли напечатать, какое слово было найдено, и строку #, где появляется слово?

Cristian Alejandro Garofalo 17.01.2019 20:22

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

nicholishen 17.01.2019 20:57

Привет ! Для чего набор? Кроме того, игнорировать регистр писать все заглавными буквами?

Cristian Alejandro Garofalo 17.01.2019 22:09

Другие вопросы по теме