使用第二个文本文件作为参考Python在文本文件中查找完全匹配

时间:2015-12-13 22:51:59

标签: python string python-3.x text match

我想在文本文件中搜索第二个文本文件中指定的完全匹配项。因此,例如文件1包含有关水果的文本,文本文件2包含以下单词:

Apple
Banana
Orange
Peach

现在,如果出现上述单词之一,则应搜索文件1的每一行。如果是这样的话,应该打印它的频率(包括重复次数不应该在输出中):

Apple 2
Orange 5

为此目的,我到目前为止已经获得了以下代码:

def search_terms():
    with open("searchterms.txt", "r") as st:
        search_terms = [line.rstrip('\n') for line in st]
    return search_terms

def exact_match(phrase, word):
    b = r'(\s|^|$)'
    return re.match(b + word + b, phrase, flags=re.IGNORECASE)

f = open("file_to_search.txt", "r")
searchstr = search_terms()
for line in f:
    for word in searchstr:
        if exact_match(line,word):
            print(word)
f.close()

一个问题是带有搜索词的文件大约有45k行。每行是在第一个文件中查找的一个可能的字符串。因此,目前执行时间很短。

我想必须有一个更有效的解决方案来做到这一点。如果有人可以提供帮助,那就太棒了。

1 个答案:

答案 0 :(得分:0)

您可以将所有搜索字词的所有小写字母存储在一个集合中,并更改您的代码:

编辑:要打印频率,您可以使用字典

def search_terms():
    with open("searchterms.txt", "r") as st:
        search_terms = [line.rstrip('\n').lower() for line in st]
    return search_terms

terms = set(search_terms())
freq = {}
for line in f:
   for word in line.split():
       if word.lower() in terms:
           if word in freq:
               freq[word]++
           else:
               freq[word]=1
for word,frequency in freq.iteritems():
    print word,frequency

根据记录here,检查in中的set的平均时间复杂度为O(1)。