伙计们,我正在尝试搜索用户将在文件夹中文件列表中输入的单词,到目前为止,我已经有了以下代码:
-Dname.of.myparameter=somting
输出是每个文件的名称的10倍,然后分别是1,0,1,0 ...(例如:Doc1 [1],Doc1 [0],Doc1 [1] ....)。似乎没有任何事情打破循环。请任何帮助
答案 0 :(得分:1)
您的代码正在打印每个文件中每一行的输出,而不仅仅是10次。如果是这种情况,我怀疑您的文件全都是10行。
以下代码仅测试str(info)
的单词,为每个文件打印一个匹配项:
import os
folderpath = "C:\\Users\\user\\Desktop\\Documents"
word = input("Choose a word : ")
for(path, dirs, files) in os.walk(folderpath, topdown=True):
for filename in files:
matched = 0
filepath = os.path.join(path, filename)
with open(filepath, 'r') as f:
info = f.readlines()
if word in str(info):
matched = 1
print("{}: [{}]".format(filename, matched))
如果您希望测试不区分大小写,只需替换:
if word in str(info):
使用:
if word.casefold() in str(info):
如果您希望对输出中每个文件的实际出现次数进行计数,则可以执行以下操作:
import os
folderpath = "C:\\Users\\user\\Desktop\\Documents"
word = input("Choose a word : ")
for(path, dirs, files) in os.walk(folderpath, topdown=True):
for filename in files:
count = 0
filepath = os.path.join(path, filename)
with open(filepath, 'r') as f:
info = f.readlines()
if word in str(info):
for line in info:
if word in line:
count += 1
print("{}: [{}]".format(filename, str(count)))
看看下面经过修改的第13行,您会看到每个匹配项以及文件名。
import os
folderpath = "C:\\Users\\user\\Desktop\\Documents"
word = input("Choose a word : ")
for(path, dirs, files) in os.walk(folderpath, topdown=True):
for filename in files:
filepath = os.path.join(path, filename)
with open(filepath, 'r') as f:
info = f.readlines()
for line in info:
if word in line:
print( filename + ":" + "[1]:", line )
else:
print(filename + "[0]")