容易理解的python用列表(栈)实现深度优先遍历文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_38124502/article/details/77802875

上片文章介绍了广度优先,下面介绍一下深度优先。
深度的应用方向和上片文章广度差不多,大家可以看看。
深度很明显,只追求其深度,不考虑广度。

下面还是画张图形容一下:
这里写图片描述
看图分析:

对(深度遍历测试)这个文件夹,进行遍历,
1>>把(文本文档1.txt)放入列表(栈),不是文件夹,弹出
2>>把(文本文档2.txt)放入列表(栈),不是文件夹,弹出

3>>把(文件夹1)放入列表(栈),是文件夹。不弹出,
3-1>>把(文件夹1)里面的所有东西放入新列表,然后遍历新列表
,把是文件夹的放入列表(栈),


就这样下去直到把一个文件夹下的所有东西都找到,
再去打开另外一个文件夹,去同样遍历。
打开了文件夹1,就要把文件夹1里面的所有东西遍历出来。
然后再去打开文件夹2,遍历它。

下面贴上代码:

# coding:utf-8
import os
class ShenDu:
    def __init__(self,path):
        "初始化函数,遍历的根目录"
        self.path = path
        self.MyList =[]#创建一个文件夹列表
        self.MyList.append(self.path)#把根目录加入列表中
        
    def BianLi(self):
        "对于遍历的具体实现"
        while len(self.MyList) !=0:
            path =self.MyList.pop()#弹出一个路径
            if os.path.isdir(path):#对弹出的路径进行判断是否为文件夹
                print("文件夹",path)
                myFileList =os.listdir(path)#如果是文件夹,就把文件夹中所有东西加入列表
                for line in myFileList:#循环列表(过滤文件)
                    myPath =path+"\\"+line#形成绝对路径
                    if os.path.isdir(myPath):#如果是文件夹就把这个文件夹添加到文件夹列表中
                        self.MyList.append(myPath)
                    else:#如果不是则输出
                        print("文件",myPath)
            else:#如果不是则输出
                print("文件",path)
    
    def __del__(self):
        "最终会执行的操作"
        pass
path =r"F:\深度遍历测试"#根目录
file =ShenDu(path)#实例化对象
file.BianLi()#执行方法

下面是执行结果:
这里写图片描述

简单说一下代码逻辑:
主要应用了列表模拟栈,先进后出,后进先出原则。
本案例代码:先把根目录压入列表(栈),然后弹出,判断弹出是否是文件夹,
因为根目录是文件夹,所以把里面的东西全部加入到一个新列表中,
对新列表进行遍历,把是文件夹的都压入列表(栈)。
这样依次执行下去,直到栈为空停止。

欢迎进(Q)群,帮你解决问题:
在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页