python目录深度遍历(栈)和广度遍历(队列)思路

栈和队列的思想是循环的解决一些问题!

深度遍历关键在于进栈出栈,栈的先进后出造就了深度的特点
深度遍历目录的思路:  
1:建立一个空的栈,然后第一个文件夹进栈,
            ↓
2.然后使用while循环,循环条件是栈不为空
            ↓
3.在循环条件下,第一个文件夹先出栈,
            ↓
4.判断出栈文件夹下面的元素是否是文件夹,如果是文件夹进栈,
            ↓

5.依次循环,直到栈为空结束循环

import os

def getdir_deep(path):
    #初始化栈,第一个元素进栈
    stack = []
    stack.append(path)
    while len(stack) != 0:
        #元素出栈
        path2 = stack.pop()
        #获取文件夹下面的子元素
        list_dir = os.listdir(path)

        for  p in list_dir:
            abs_path = os.path.join(path2, p)
            #判断是否是文件夹,如果是文件夹则进栈,
            if os.path.isdir(abs_path):
                print("目录------:",p)
                #进栈!!!!!!!!!!!!!
                stack.append(abs_path)
            else:
                print("普通文件"+p)


path = os.getcwd()
getdir_deep(path)
队列
广度遍历文件目录
实现思路:关键在于进队出队,队列的先进先出造成了广度的特点
1.初始化一个对列,然后第一个文件夹目录进队
            ↓
2.使用while循环建立循环体系,循环条件是队列不为空
            ↓
3.进队的第一个文件夹出队
            ↓
4.获取第一个文件夹下面的子文件内容
            ↓
5.判断子子文件内容是文件夹还是文件,如果是文件则进行进队,
            ↓

6.依次循环直到列队为空结束

import os
import collections

def dirGet_breadth(path):
    # 初始化队列
    queue = collections.deque()
    #第一个元素进栈
    queue.append(path)

    #使用while循环,循环条件队列不为空
    while len(queue) != 0:
        #元素出队
        path2 = queue.popleft()
        dir_list = os.listdir(path2)
        # 判断第出栈元素下面文件是否为文件夹,如果是文件夹则入队
        for filename in dir_list:
            #对路径进行拼接,
            path_abs = os.path.join(path2,filename)
            if os.path.isdir(path_abs):
                print("目录----",filename)
                #是文件夹进队!!!!!!!
                queue.append(path_abs)
            else:
                print("文件--",filename)

path = os.getcwd()
dirGet_breadth(path)

你可能感兴趣的:(python)