容易理解的python用队列实现广度优先遍历文件
来源:互联网 发布:表格公式查找相同数据 编辑:程序博客网 时间:2024/06/09 16:22
需求简单介绍:
硬盘中查询文件,不同目录中文件的整合,项目开发中多文件联合查找,等都要用到文件遍历。
首先简单阐述一下广度遍历实现方式:
广度遍历文件很明显,每一次遍历不追求遍历目录的深度,只追求其广度。
下面画张图形容一下
看图分析:
对(广度遍历测试)这个文件夹,进行遍历,
第一次把A中的东西遍历完,[文件夹1,文件1.txt,文件2.txt,文件3.txt]
第二次把B遍历完,[文件夹2,文件4.txt,文件5.txt]
第三次把C中东西遍历完[文件6.txt]。
也就是每次对同级目录进行遍历,不管其他的层级。
[文件夹1,文件1.txt,文件2.txt,文件3.txt] 在同级A中
[文件夹2,文件4.txt,文件5.txt]在同级B中
[文件6.txt]在同级C中
# coding:utf-8import osfrom collections import deque#从收集模块中导入双端队列class GuangDu: def __init__(self,path): "初始换函数,读取的根目录" self.path =path self.MyList =deque([])#实例化一个队列 self.MyList.append(self.path)#把根目录路径放入队列中 def BianLi(self): "广度遍历的方法实现" while len(self.MyList) !=0:#当队列中为空的时候跳出循环 path =self.MyList.popleft()#从队列中弹出一个路径 if os.path.isdir(path):#对弹出的path路径判断是否是一个文件夹 print("文件夹",path)#打印文件夹的路径 myFilePath =os.listdir(path)#如果是一个文件夹,就把文件夹里面的所有东西添加进列表中, for line in myFilePath:#对添加到列表中的东西进行遍历 myPath =path +"\\"+line#形成绝对路径, self.MyList.append(myPath)#把遍历的东西都加入到队列中 else:#如果不是一个文件夹,就直接把路径打印出来,不用对其进行遍历了 print("文件",path) def __del__(self): "最终会执行的函数" passpath =r"F:\广度遍历测试"#初始的文件目录file =GuangDu(path)#实例化一个对象file.BianLi()#对象调用方法
运行结果如下:
代码上添加了详细注释,下面简单说一下逻辑:
主要利用队列的先进先出,本案例中可以想象一下就是,先把根目录加入队列,然后从队列中弹出根目录,并判断是否为文件夹,因为根目录是个文件夹,所以就打开这个目录,把根里面的所有东西添加到队列中,此时队列中就是上图中A层级的所有文件,然后循环对A层级所有东西进行判断。A层级执行完以后,B层级加入队列在执行,然后C执行,就这样直到队列为空停止。
阅读全文
0 0
- 容易理解的python用队列实现广度优先遍历文件
- 容易理解的python用列表(栈)实现深度优先遍历文件
- 广度优先遍历队列实现
- 利用队列实现图的广度优先遍历
- 图广度优先遍历(队列实现)
- C语言队列实现广度优先遍历
- 图的广度优先遍历::邻接矩阵+队列.
- 对“广度优先遍历”的理解
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 数据结构--图的理解:深度优先和广度优先遍历及其 Java 实现
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 图的理解:深度优先和广度优先遍历及其 Java 实现
- 图的深度优先遍历和广度优先遍历实现
- 图的理解:深度优先和广度优先遍历
- 用java语言实现图的广度优先遍历和深度优先遍历
- python 图的遍历-深度优先和广度优先
- python深度优先与广度优先的遍历算法比较
- Python 用队列,广度遍历文件夹
- Android之Fragment
- 在线JSON字符串转Java实体类(JavaBean)
- Two HDU
- 动态代理总结
- 解析C语言结构体对齐(内存对齐问题)
- 容易理解的python用队列实现广度优先遍历文件
- 2017/09计划
- 前嗅ForeSpider数据采集系统表单字段属性设置方法
- 职场沟通中还分上下左右?
- C语言编程初识json
- vyos
- 【南阳理工】 56 阶乘因式分解(一)
- const 和 #define 的区别
- Unity编辑器拓展之二:ReorderableList可重新排序的列表框(复杂使用)