1

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

4

1 回答 1

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 秒。

于 2013-04-24T17:27:29.520 回答