在多个目录中按名称搜索文件?

时间:2013-04-24 17:01:27

标签: python search windows-7 python-3.x directory

好的,这是我的问题。我在工作时使用目录中的两个目录和所有子文件夹。我想编写一个程序,提示我输入文件名,在给出文件名后,它会搜索这两个目录以及这些目录中的所有子文件夹,查找名称匹配的文件。是否有捷径可寻。任何和所有的帮助将不胜感激。我想在python 3中这样做 (注意:这是我的第一个真正的项目,老实说我不知道​​从哪里开始。)

1 个答案:

答案 0 :(得分:2)

这是一个带递归辅助函数的函数,它返回文件夹中的所有文件(以字典形式:{file_name: file_path, ...}

import os, os.path

def getFiles(path):
    '''Gets all of the files in a directory'''
    sub = os.listdir(path)
    paths = {}
    for p in sub:
        print p # just to see where the function has reached; it's optional
        pDir = os.path.join(path, p)
        if os.path.isdir(pDir): 
            paths.update(getAllFiles(pDir, paths))
        else:
            paths[p] = pDir
    return paths

def getAllFiles(mainPath, paths = {}):
    '''Helper function for getFiles(path)'''
    subPaths = os.listdir(mainPath)
    for path in subPaths:
        pathDir = pDir = os.path.join(mainPath, path)
        if os.path.isdir(pathDir):
            paths.update(getAllFiles(pathDir, paths))
        else:
            paths[path] = pathDir
    return paths

例如,如果您要查找myfile.txt,则其中一个字典键:值对将类似于{'myfile.txt': 'C:\Users\Example\Path\myfile.txt', ...}

根据文件夹的文件数量,可能会很慢。为了搜索我的sys.path(其中有10个文件夹,其中一个是Python\Lib,这是大型的),大约需要9秒。