递归、栈模拟、队列模拟遍历目录

1、递归调用目录
import os

def get_all_dir_re(path, sp = ''):
    # 得到当前目录下的所有文件
    file_list = os.listdir(path)
    # 处理每一个文件
    sp += ' '
    for fileName in file_list:
        # 判断是否是目录(使用绝对路径)
        file_abs_path = os.path.join(path, fileName)
        if os.path.isdir(file_abs_path):
            print(sp + '目录:' + fileName)
            # 递归调用
            get_all_dir_re(file_abs_path, sp)
        else:
            print(sp + '普通文件:' + fileName)

get_all_dir_re(r'D:\BaiduNetdiskDownload')
2、栈模拟递归遍历目录(深度遍历)
import os

def get_all_dir_de(path, sp = ''):
    stack = []
    stack.append(path)
    # 处理栈,当栈为空的时候循环结束
    while len(stack) != 0:
        # 从栈里取数据
        dirpath = stack.pop()
        # 路径下的所有文件
        files_list = os.listdir(dirpath)
        # 处理每一个文件,如果是普通文件就打印出来,如果是目录,则将该目录的地址压栈
        for file_name in files_list:
            file_abs_name = os.path.join(dirpath, file_name)
            if os.path.isdir(file_abs_name):
                # 是目录就压栈
                print(sp + '目录:' + file_name)
                stack.append(file_abs_name)
            else:
                print(sp + '普通文件:' + file_name)

get_all_dir_de(r'D:\BaiduNetdiskDownload')
3、队列模拟递归遍历目录(广度遍历)
import os
import collections

def get_all_dir_qu(path):
    queue = collections.deque()
    # 进队
    queue.append(path)
    while len(queue) != 0:
        # 出队
        dirpath = queue.pop()
        # 路径下的所有文件
        files_list = os.listdir(dirpath)
        for file_name in files_list:
            file_abs_name = os.path.join(dirpath, file_name)
            if os.path.isdir(file_abs_name):
                print('目录:' + file_name)
                queue.append(file_abs_name)
            else:
                print('普通文件:' + file_name)

get_all_dir_qu(r'D:\BaiduNetdiskDownload')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值