深度遍历关键在于进栈出栈,栈的先进后出造就了深度的特点
深度遍历目录的思路:
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)
队列
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)