如何检查值是否与txt文件匹配

时间:2019-01-08 12:34:58

标签: python for-loop any

我目前正在尝试解决一个解决方案,其中我有一个值和一个文本文件(.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函数并针对句子中的句子:我的想法是检查关键字是否与txt文件匹配。如果是,那么我们只继续执行程序,否则,我们打印出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 :(得分:3)

假设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

注意:我还是不明白是需要匹配整个字符串还是匹配字符串的每个字符...

答案 1 :(得分:1)

这里不需要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()

答案 2 :(得分:0)

您可以尝试一下:

text = "Some dummy text with numbers 123"
tokens = text.split(" ")
num = "123" # Number as string
if num in token:
    print("True")
else :
    print("False")