将字符串与多个列表匹配以实现搜索功能
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
循环中使用内置范围。
如果有效请告诉我!
我有一个搜索功能,可以在 .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
循环中使用内置范围。
如果有效请告诉我!