递归遍历所有目录,直到在Python中找到某个文件

时间:2016-10-05 16:49:11

标签: python file recursion directory

在找到某个文件之前,Python以递归方式遍历所有目录的最佳方法是什么? 我想查看目录中的所有文件,看看我正在寻找的文件是否在该目录中。 如果我找不到它,我会转到父目录并重复此过程。我也想数数 在找到文件之前我经历了多少个目录和文件。如果没有文件 循环结束返回没有文件

startdir ="用户/..../ file.txt"

findfile是文件名。这是我当前的循环,但我想使用递归使其工作。

def walkfs(startdir, findfile):
    curdir = startdir
    dircnt = 0
    filecnt = 0
    for directory in startdir:
        for file in directory:
            curdir = file
            if os.path.join(file)==findfile:
                return (dircnt, filecnt, curdir)
            else:
                dircnt+=1
                filecnt+=1

2 个答案:

答案 0 :(得分:3)

不要重新发明目录递归轮。只需使用os.walk() function,它就可以循环遍历目录:

def walkfs(startdir, findfile):
    dircount = 0
    filecount = 0
    for root, dirs, files in os.walk(startdir):
        if findfile in files:
            return dircount, filecount + files.index(findfile), os.path.join(root, findfile)
        dircount += 1
        filecount += len(files)
    # nothing found, return None instead of a full path for the file
    return dircount, filecount, None

答案 1 :(得分:0)

def findPath(startDir,targetFile):
    file_count = 0
    for i,(current_dir,dirs,files) in enumerate(os.walk(startDir)):
        file_count += len(files)
        if targetFile in files:
           return (i,file_count,os.path.join(current_dir,targetFile))
    return (i,file_count,None)

print findPath("C:\\Users\\UserName","some.txt")