在一组文件中搜索input_from_user词

时间:2019-02-06 14:21:08

标签: python python-3.x python-2.7

伙计们,我正在尝试搜索用户将在文件夹中文件列表中输入的单词,到目前为止,我已经有了以下代码:

-Dname.of.myparameter=somting

输出是每个文件的名称的10倍,然后分别是1,0,1,0 ...(例如:Doc1 [1],Doc1 [0],Doc1 [1] ....)。似乎没有任何事情打破循环。请任何帮助

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]")