容易理解的python用列表(栈)实现深度优先遍历文件
来源:互联网 发布:常州数控编程培训 编辑:程序博客网 时间:2024/06/05 13:25
上片文章介绍了广度优先,下面介绍一下深度优先。
深度的应用方向和上片文章广度差不多,大家可以看看。
深度很明显,只追求其深度,不考虑广度。
下面还是画张图形容一下:
看图分析:
对(深度遍历测试)这个文件夹,进行遍历,
1>>把(文本文档1.txt)放入列表(栈),不是文件夹,弹出
2>>把(文本文档2.txt)放入列表(栈),不是文件夹,弹出
3>>把(文件夹1)放入列表(栈),是文件夹。不弹出,
3-1>>把(文件夹1)里面的所有东西放入新列表,然后遍历新列表
,把是文件夹的放入列表(栈),
….
….
就这样下去直到把一个文件夹下的所有东西都找到,
再去打开另外一个文件夹,去同样遍历。
打开了文件夹1,就要把文件夹1里面的所有东西遍历出来。
然后再去打开文件夹2,遍历它。
下面贴上代码:
# coding:utf-8import osclass 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): "最终会执行的操作" passpath =r"F:\深度遍历测试"#根目录file =ShenDu(path)#实例化对象file.BianLi()#执行方法
下面是执行结果:
简单说一下代码逻辑:
主要应用了列表模拟栈,先进后出,后进先出原则。
本案例代码:先把根目录压入列表(栈),然后弹出,判断弹出是否是文件夹,
因为根目录是文件夹,所以把里面的东西全部加入到一个新列表中,
对新列表进行遍历,把是文件夹的都压入列表(栈)。
这样依次执行下去,直到栈为空停止。
阅读全文
0 0
- 容易理解的python用列表(栈)实现深度优先遍历文件
- 容易理解的python用队列实现广度优先遍历文件
- 深度优先遍历的栈实现
- python实现链表的深度优先遍历
- Python实现文件夹深度优先遍历
- 对“深度优先遍历”的理解
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 数据结构--图的理解:深度优先和广度优先遍历及其 Java 实现
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 图的深度优先遍历和广度优先遍历实现
- 图的理解:深度优先和广度优先遍历
- 栈实现的图邻接矩阵深度优先遍历
- 用java语言实现图的广度优先遍历和深度优先遍历
- python 图的遍历-深度优先和广度优先
- python深度优先与广度优先的遍历算法比较
- 图的深度优先和广度优先遍历及其实现
- 用深度优先和广度优先遍历文件夹下符合条件的文件
- sql常见面试题
- sqoop和sqoop2的运行原理、安装、操作(1)
- 剑指offer-顺时针打印矩阵
- 《统计学习方法》笔记(一)
- 注释的总结
- 容易理解的python用列表(栈)实现深度优先遍历文件
- InnoDB与MyISAM的六大区别
- CentOS查看版本号
- 前端之js-this指针
- mybatis的<if test> 条件判断
- Initializer Lists
- js事件捕获或和事件冒泡
- [LeetCode] 662. Maximum Width of Binary Tree
- codeforces 461A Appleman and Toastman