容易理解的python用队列实现广度优先遍历文件

需求简单介绍:
硬盘中查询文件,不同目录中文件的整合,项目开发中多文件联合查找,等都要用到文件遍历。
首先简单阐述一下广度遍历实现方式:
广度遍历文件很明显,每一次遍历不追求遍历目录的深度,只追求其广度。
下面画张图形容一下容易理解的python用队列实现广度优先遍历文件_第1张图片
看图分析:

对(广度遍历测试)这个文件夹,进行遍历,
第一次把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-8
import os
from 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):
        "最终会执行的函数"
        pass
    
path =r"F:\广度遍历测试"#初始的文件目录
file =GuangDu(path)#实例化一个对象
file.BianLi()#对象调用方法

运行结果如下:
容易理解的python用队列实现广度优先遍历文件_第2张图片
代码上添加了详细注释,下面简单说一下逻辑:
主要利用队列的先进先出,本案例中可以想象一下就是,先把根目录加入队列,然后从队列中弹出根目录,并判断是否为文件夹,因为根目录是个文件夹,所以就打开这个目录,把根里面的所有东西添加到队列中,此时队列中就是上图中A层级的所有文件,然后循环对A层级所有东西进行判断。A层级执行完以后,B层级加入队列在执行,然后C执行,就这样直到队列为空停止。

欢迎进(Q)群,帮你解决问题:
容易理解的python用队列实现广度优先遍历文件_第3张图片

你可能感兴趣的:(python中文件的操作)