将字符串与多个列表匹配以实现搜索功能

Matching strings with multiple lists for a search function

我有一个搜索功能,可以在 .docx 文件中查找字符串。我想添加一个拆分功能: search_terms = x.split() 所以我可以有多个搜索词。

现在,如果我搜索两个单独的术语,该函数会将字符串解释为一个术语并在文档中查找该术语。

split 函数负责将术语分成不同的字符串,但我不确定如何关联文件名、文件中的文本和字符串。如有任何建议,我们将不胜感激!

import os
import docx2txt

os.chdir('c:/user/path/to/files')

path = ('c:/user/path/to/files')

files = []

x = str(input("search: "))

for file in os.listdir(path):
    if file.endswith('.docx'):
        files.append(file)

for i in range(len(files)):
    text = docx2txt.process(files[i])
    if x.upper() in text.upper() or x.lower() in text.lower():
        print (files[i])

尝试以下操作:

import os
import docx2txt

os.chdir('c:/user/path/to/files')

path = ('c:/user/path/to/files')

files = [f for f in os.listdir(path) if f.endswith('.docx')]

search_terms = str(input("search: ")).split()

for file in files:
    text = docx2txt.process(file)
    if any(x.upper() in text.upper() for x in search_terms):
        print (file)

恕我直言建议修复:

  • 我删除了 or x.lower() in text.lower(),因为它是多余的。
  • 如果 search_terms(要查找的术语列表)中的任何 x 出现在 text 中,它将被匹配。
  • 您可以使用列表理解在 1 行中构建文件列表 [f for f in os.listdir(path) if f.endswith('.docx')]
  • 由于 files 是可迭代的,因此无需在 for 循环中使用内置范围。

如果有效请告诉我!