Python使用广度优先和深度优先两种方法遍历目录树

2016-12-08 董付国 Python小屋 Python小屋

代码不长,并且加了很多注释,就不再多说明了。

from os import listdir

from os.path import join, isfile, isdir


def listDirWidthFirst(directory):

    '''广度优先遍历文件夹'''

    #使用列表模拟双端队列,效率稍微受影响,不过关系不大

    dirs = [directory]

    #如果还有没遍历过的文件夹,继续循环

    while dirs:

        #遍历还没遍历过的第一项

        current = dirs.pop(0)

        #遍历该文件夹

        #如果是文件就直接输出显示

        #如果是文件夹,输出显示后,标记为待遍历项

        for subPath in listdir(current):

            path = join(current, subPath)

            if isfile(path):

                print(path)

            elif isdir(path):

                print(path)

                dirs.append(path)


def listDirDepthFirst(directory):

    '''深度优先遍历文件夹'''

    #遍历文件夹

    #如果是文件就直接输出

    #如果是文件夹,就输出显示,然后递归遍历该文件夹

    for subPath in listdir(directory):

        path = join(directory, subPath)

        if isfile(path):

            print(path)

        elif isdir(path):

            print(path)

            listDirDepthFirst(path)


directory = r'F:\test'

listDirWidthFirst(directory)

print('='*30)

listDirDepthFirst(directory)


由于手机屏幕大小不同,很难有统一的排版方式,考虑了一下,对于较短的代码,我把截图一起发上来,这样比较好对照,尤其是代码的缩进。



代码运行结果类似于下面图中的样子: