首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 学习之目录递归

阅读文本大概需要 6 分钟

写在前面

这两天咨询了下各位读者的意见,建议是在每一次分享时可以分享一些对应的练习题,之前也这样做过,慢慢地就消失了。所以之后会尽量给大家找一些对应的练习题,如果大家有好的练习题也可以告诉我一下。

今天要学习的内容是关于栈和队列的简单介绍,之后分别用递归函数、栈、队列对自己的目录文件进行深度遍历与广度遍历。

栈的介绍

1

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行,如同封底的容器一般,特点是先进后出。

# 模拟栈结构,先进后出

stack = []

print(stack)# []

# 压栈

stack.append("A")

stack.append("B")

stack.append("C")

# 出栈

p = stack.pop()

print(p)# C

print(stack)# ['A', 'B']

队列的介绍

2

队列也是一种特殊的线性表。其特殊性在于限定一端插入而另一端删除数据元素(队尾进队头出),如同排队买票一般,特点是先进先出。

# 模拟队列,先进先出

importcollections

# 创建队列

q = collections.deque()

print(q)# deque([])

# 进队

q.append("A")

q.append("B")

q.append("C")# deque(['A', 'B', 'C'])

print(q)

# 出队

p = q.popleft()

print(p)# A

print(q)# deque(['B', 'C'])

函数递归目录

3

importos

p =r"C:\Users\Mark\PycharmProjects\Python"

defgetAllDir(path, sp):

# 得到当前目录下所有的文件

fileList = os.listdir(path)

sp +=" "

# 处理每一个文件

forfileNameinfileList:

fileAbsPath = os.path.join(p, fileName)

# 判断是否是目录(用绝对路径)

ifos.path.isdir(fileAbsPath):

print(sp +"目录", fileName)

# 递归调用

getAllDir(fileAbsPath, sp)

else:

print(sp +"普通文件:", fileName)

getAllDir(p, sp="")

队列之广度遍历

4

广度遍历:1 是根目录 ,1 进栈处理之后,2 5 进栈,将 2 和 5 处理之后,依次处理 3 4 6 7,按照层级处理

# 广度遍历

importos

importcollections

p =r"C:\Users\Mark\PycharmProjects\Python"

defgetAllDirBe(p):

q = collections.deque()

q.append(p)

# 处理栈,当队列为空的时候结束循环

whilelen(q) !=:

# 从队列里取出数据

dirPath = q.popleft()

# 目录下的所有文件

fileList = os.listdir(dirPath)

# 处理每一个文件,如果是文件打印,目录地址进队

forfileNameinfileList:

fileAbsPath = os.path.join(dirPath, fileName)

# 判断是否是目录(用绝对路径)

ifos.path.isdir(fileAbsPath):

print("目录:"+fileName)

q.append(fileAbsPath)

else:

print("普通文件:"+fileName)

getAllDirBe(p)

栈之深度遍历

5

深度遍历:1 是根目录 ,1 进栈处理之后,2 5 进栈,将 2 目录下的全部处理完之后,开始处理 5 下面的

# 深度遍历

importos

p =r"D:\BaiduNetdiskDownload\Java\第1阶段\day01"

defgetAllDirDe(p):

stack = []

stack.append(p)

# 处理栈,当栈为空的时候结束循环

whilelen(stack) !=:

# 从栈里取出数据

dirPath = stack.pop()

# 目录下的所有文件

fileList = os.listdir(dirPath)

# 处理每一个文件,如果是文件打印,目录地址压栈

forfileNameinfileList:

fileAbsPath = os.path.join(dirPath, fileName)

# 判断是否是目录(用绝对路径)

ifos.path.isdir(fileAbsPath):

print("目录:"+fileName)

stack.append(fileAbsPath)

else:

print("普通文件:"+fileName)

getAllDirDe(p)

写在最后

好了,今天的分享就到这了,觉得写得不错的,点赞转发支持下。

点赞、转发是一种态度。

「 Python 梦工厂 」

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G08LCI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券