Самый быстрый способ поиска в Python, если текстовый файл содержит любое слово из списка - PullRequest
0 голосов
/ 03 августа 2020

Используя python, я хочу проверить, содержит ли текстовый файл какое-либо слово из списка?

Один из возможных способов сделать это:

file_data = []
search_words = ['one', 'two', 'three']
with open(filePath, 'r') as f:
        file_data = f.read()
for line in file_data:
    for single_word in search_words:
        if single_word in line.split()
            print("Found {0} in {1}".format(single_word, line))

Но есть ли лучший способ сделать то же самое?

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Просто используйте grep:

import subprocess

def search_file(filename):
    words = ['one', 'two', 'three']
    command = f'grep -n {filename} -e ' + ' -e '.join(words)

    # command = 'grep -n {filename} -e one -e two -e three'

    return subprocess.check_output(command, shell=True).decode()

Флаг -n указывает grep передавать номер строки своего совпадает, а флаг -e сообщает ему, какие шаблоны следует искать.

Вы даже можете сканировать весь каталог, используя флаг -r:

import subprocess

def search_dir(directory):
    words = ['one', 'two', 'three']
    command = f'grep -n -r {directory} -e ' + ' -e '.join(words)
    return subprocess.check_output(command, shell=True).decode()

Работает только в unix средах. Если вы используете Windows, вам нужно будет использовать findstr.

0 голосов
/ 03 августа 2020

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

import re

search_words = ["wordA", "wordB"]
pattern = ""
for word in search_words:
    _ = "(?=.*" + word + ")"
    pattern += _
txt = "Neque porro wordA quisquam est qui wordB dolorem ipsum quia dolor"

x = re.search(pattern, txt)
if x:
  print("YES! We have a match!")
else:
  print("No match")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...