Python实现深度优先遍历目录和广度优先遍历目录

本文介绍如何使用栈实现深度优先遍历目录,以及使用队列实现广度优先遍历目录的方法。通过具体代码示例,展示了如何获取指定路径下所有子目录和文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面的图是我要遍历的目录示意图:

图中的圆角矩形代表文件夹,菱形是文件。

一、用栈实现的深度优先遍历目录

import os

def get_all_dirs_deep(path):
    '''深度优先遍历'''
    stack=[]
    stack.append((path,0))
    #把我们给的文件夹路径压入栈
    
    while len(stack)!=0:
        #当栈不为空的时候,要处理栈里的目录
        current_dir,level=stack.pop()
        print(level*'    '+'目录: '+os.path.basename(current_dir))
        #把栈里的最后一个目录取出来处理
        fileslist=os.listdir(current_dir)
        #获取当前正在处理的目录里的文件目录
        for filename in fileslist:
            #针对当前处理的目录里所有的文件
            fileabspath=os.path.join(current_dir,filename)
            #获取每个文件的绝对路径
            if os.path.isdir(fileabspath):
                stack.append((fileabspath,level+1))
                #如果这个文件还是目录,就打印出提示,并且压进栈,继续处理
            else:
                print((level+1)*'    '+'普通文件: '+filename)
                #如果是普通文件,就不处理了,只打印出提示
        
get_all_dirs_deep('D:\\爷爷')

终端:

 

二、用队列实现的广度优先遍历目录

import os,collections

def get_all_dirs_wide(path):
    '''广度优先遍历'''
    queue=collections.deque()
    queue.append((path,0))
    #先让我们要查看的路径进队列

    while len(queue)!=0:
        #当队列不空时,执行下面的代码
        current_path, level=queue.popleft()
        print(level*'    '+"目录: "+os.path.basename(current_path))
        #取出队列里排在打头位置的目录,赋给当前目录,也就是我们现在要处理的
        fileslist=os.listdir(current_path)
        #获取当前目录里所有的文件列表
        for filename in fileslist:
            #对于列表里的每个文件
            fileabspath=os.path.join(current_path,filename)
            #获取每个文件的绝对路径
            if os.path.isdir(fileabspath):
                queue.append((fileabspath,level+1))
                #是目录就放进队列继续处理
            else:
                print((level+1)*'    '+'普通文件:'+filename)
                #文件就只打印提示,不需要处理了

get_all_dirs_wide('D:\\爷爷')

终端:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值