扫描目录,在文件中查找字符串并打印结果

时间:2016-05-29 05:36:31

标签: string file loops python-3.x directory

标题可能不会对任何人都有正义,所以让我顺利一点。 我正在尝试编写一个程序,该程序将扫描我的驱动器E:\以获取waterfireair等字词列表。在我的E:\驱动器中,我显然文件夹中的文件夹和文件夹中的文件,依此类推。

我想调用函数search (path, text),它在文本中可以输入列表['water', 'fire', 'air']。所以它看起来像这样:search('E:\\', ['water', 'fire', 'air'])

我希望能够扫描目录,并使用每个'行'它扫描,打印Scanning: E:\\...。我有这个。当它找到水,火和/或空气时,我也想要输出In (directory name) found water, fire; In (directory name) found air等我完成了这一部分。我无法弄清楚如何让它显示多个单词(如果适用)。

我正在寻找的输出将是这样的,例如:

Scanning: E:\ Scanning: E:\Python Fun! Scanning: E:\Python Fun!\1st Week Scanning: E:\Python Fun!\2nd Week Scanning: E:\Python Fun!\3rd Week In E:\Python Fun!\3rd Week\elements.txt found 'fire', 'water' Scanning: E:\Python Fun!\4th Week Scanning: E:\Python Fun!\5th Week In E:\Python Fun!\5th Week\elements.txt found 'air Scanning...  等等

这是我的代码:

import os
def search(path, text):

    for text in texts:
        if os.path.isfile(path): #base case
            if text in path:
                print(path)
            return

    if not os.path.exists(path):
        return

    for item in os.listdir(path):
        itempath = os.path.join(path, item)

        if os.path.isfile(itempath):
            if text in item:
                print('In {} found {}'.format(itempath, word))

        elif os.path.isdir(itempath):

            search(itempath, text)
            print('Scanning:', path)
            #open(itempath).read() #tested this but got an error. See below.
        else: #unknown object type
            pass

search('E:\\',['water','fire', 'air'])

我收到的Traceback错误是AttributeError: 'str' object has no attribute 'read'。所以我评论了它。

使用此代码,我得到的结果基本上是列表中的最后一个字母,在这种情况下,r作为被搜索的内容。我想这是因为额外的循环?但不确定。

我知道我需要在某个地方添加open filename,但我又对如何实现它感到困惑。我刚刚开始学习操作系统模块,以便解决大部分混乱问题。我很难过。

1 个答案:

答案 0 :(得分:0)

对于递归迭代您的驱动器,请考虑使用glob代替:

import glob

for filename in glob.iglob('E:/**/**', recursive=True):
    print("Scanning", filename);
    with open(filname, 'r', encoding='utf-8') as file: content = file.read()
    for text in texts:
        if text in content:
            print("Found:", text, " - ", filename);

为了扫描文件的内容,您还需要open()个。