Как проверить, соответствует ли значение текстовый файл - PullRequest
0 голосов
/ 08 января 2019

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

В настоящее время я имею в виду, что у меня есть текстовый файл, который выглядит следующим образом:

999486
1117978
990583
1128062
1120618

и код, который выглядит следующим образом:

def filter():

    item_name = '1128062'

    keyword = [line.rstrip('\n') for line in open('keywords.txt')]

    has_good = False

    sentences = [item_name]

    def check_all(sentence, ws):
        return all(re.search(r'\b{}\b'.format(w), sentence) for w in ws)

    for sentence in sentences:
        if any(check_all(sentence, word) for word in keyword):
            has_good = True
            break

    if not has_good or keyword == "":
        print("Removed the keyword - " + str(item_name))
        sys.exit()

Что делает скрипт:

что у него есть item_name, у которого есть значение. Открывает ключевое слово, где хранятся все ключевые слова

С помощью функции check_all и для предложения в предложениях: моя идея состояла в том, чтобы проверить, соответствует ли ключевое слово в текстовом файле. И если это так, то мы просто продолжаем программу, а если нет, то выводим ключевое слово Removed и выходим из программы sys.exit.

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

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Users\PC\AppData\Local\Programs\Python\Python36\lib\threading.py", line 916, in _bootstrap_inner
    self.run()
  File "C:\Users\PC\AppData\Local\Programs\Python\Python36\lib\threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "C:/Users/test.py.py", line 324, in filter
    if any(check_all(sentence, word) for word in keyword):
  File "C:/Users/test.py.py", line 324, in <genexpr>
    if any(check_all(sentence, word) for word in keyword):
  File "C:/Users/test.py.py", line 321, in check_all
    return all(re.search(r'\b{}\b'.format(w), sentence) for w in ws)
  File "C:/Users/test.py.py", line 321, in <genexpr>
    return all(re.search(r'\b{}\b'.format(w), sentence) for w in ws)
  File "C:\Users\PC\AppData\Local\Programs\Python\Python36\lib\re.py", line 182, in search
    return _compile(pattern, flags).search(string)
TypeError: expected string or bytes-like object

Я понял, что это должно быть что-то, что касается

def check_all(sentence, ws):
    return all(re.search(r'\b{}\b'.format(w), sentence) for w in ws)

и вот где у меня возникает проблема, и я спрашиваю вас, ребята, как я могу проверить, соответствует ли ключевое слово в файле .txt, и если оно не совпадает, то мы выводим Удалено ключевое слово и sys.exit из программы, если она совпадает, мы ничего не делаем.

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Здесь нет необходимости в модуле re, так как, похоже, мы просто ищем совпадение строк.

import sys

KEYWORDS_PATH = 'keyword.txt'
KEYWORDS = open(KEYWORDS_PATH).read().splitlines()

sentences = ['999487']

for sentence in sentences:
    if sentence in KEYWORDS:
        print('Removed the keyword - %s' % sentence)
        sys.exit()
0 голосов
/ 08 января 2019

Вы можете попробовать это:

text = "Some dummy text with numbers 123"
tokens = text.split(" ")
num = "123" # Number as string
if num in token:
    print("True")
else :
    print("False")
0 голосов
/ 08 января 2019

Предполагая, что вы просто хотите напечатать true, если keyword находится в файле, False, если keyword нет в файле ... попробуйте выполнить приведенный ниже код ...

текстовый файл :: 999486 1117978 990583 1128062 1120618

программа ::

def match_string(text):
    result = False
    keyword = [line.rstrip('\n') for line in open('keyword.txt')]
    if text in keyword:
        result = True
    return result

match_string('999487')

returns True

Примечание : Тем не менее я не могу понять, нужно ли вам сопоставлять целую строку или соответствовать каждому символу строки ...

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