python三种遍历目录的方法递归 栈 和队列

递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一

种描述问题和解决问题的基本方法。

说白了递归就是函数自己玩自己

def getAllDirAndFile(path, p=''):
    # 得到当前目录下所有的文件
    fileList = os.listdir(path)
    # print(fileList)
    p += "    "
    # 处理每一个文件
    for fileName in fileList:
        # isdir   isfile
        # 获取文件或文件夹的绝对路径
        fileAbs = os.path.join(path, fileName)
        # print(fileAbs)
        # 判断当前路径是不是文件夹
        if os.path.isdir(fileAbs):
            print(p + '文件夹' + fileName)
            # 递归调用
            getAllDirAndFile(fileAbs, p)
        else:
            print(p + '普通文件' + fileName)

使用栈遍历目录又叫深度遍历(不撞南墙不回头,然后再去走另一条路)

想象一摞被堆起来的书,这就是栈。这堆书的特点是,最后被堆进去的书,永远在最上面。从这堆书里面取一本书出来,取哪本书最方便?肯定是最上面那本。栈这种数据结构的特点就是如此:后进先出(Last In First Out - LIFO),即最后被堆进去的数据,最先被拿出来

def getAllDirAndFile(path):
    stack = []  # 空元素
    stack.append(path)  # [r'C:\Users\xlg\Desktop\a']
    # 循环遍历处理栈的内容,当栈里面的内容为空时退出
    while len(stack) != 0:
        # 从栈里取出元素
        dirPath = stack.pop()  
        # 遍历dirPath目录下的所有文件
        fileList = os.listdir(dirPath)   
        for fileName in fileList:
            fileAbs = os.path.join(dirPath, fileName)
            if os.path.isdir(fileAbs):
                # 当当前目录时文件夹,进行入栈操作
                print('文件夹' + fileName)
                stack.append(fileAbs)   
            else:
                print('普通文件' + fileName)

使用队列遍历目录又叫做广度遍历(所有的路一起走)

队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存

储按顺序排列的数据,先进先出,这点和栈刚好相反

def getAllDirAndFile(path):
    # 创建队列
    queue = collections.deque()
    # 添加元素
    queue.append(path)  #[a]
    while len(queue) != 0:
        # 移除队列中的元素
        dirPath = queue.popleft()
        # 获取dirPath下的所有文件及文件夹
        fileList = os.listdir(dirPath)
        for fileName in fileList:
            # 绝对路径
            fileAbs = os.path.join(dirPath, fileName)
            # 如果是文件夹就放到队列中
            if os.path.isdir(fileAbs):
                print('文件夹' + fileName)
                queue.append(fileAbs)
            else:
                print('文件' + fileName)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值