python栈、队列、文件目录遍历
2024-09-05 23:56:47
一、 栈与队列
关注公众号“轻松学编程”了解更多。
1、 栈 stack
特点:先进先出[可以抽象成竹筒中的豆子,先进去的后出来] 后来者居上
mystack = []
#压栈[向栈中存数据]
mystack.append(1)
print(mystack)
mystack.append(2)
print(mystack)
mystack.append(3)
print(mystack)
#出栈[从栈中取数据]
mystack.pop()
print(mystack)
mystack.pop()
print(mystack)
2、 队列 queue
特点: 先进先出[可以抽象成一个平放的水管]
#导入数据结构的集合
import collections
queue = collections.deque([1, 2, 3, 4, 5])
print(queue)
#入队[存数据]
queue.append(8)
print(queue)
queue.append(9)
print(queue)
#取数据
print(queue.popleft())
print(queue)
二、 目录遍历
1、 递归遍历目录
import os
def diguigetAllDir(path,suojin):
# 如果文件夹中只有文件则返回
if os.path.isfile(path):
return
# 如果为空文件夹则返回
list1 = os.listdir(path)
if len(list1) == 0:
return
# 遍历list1列表
for item in list1:
print(' '*suojin,'%s'%item)
path1 = os.path.join(path,item)
if os.path.isdir(path1):
diguigetAllDir(path1, suojin + 4)
# 遍历当前目录
diguigetAllDir(os.getcwd(),0)
2、 栈模拟递归遍历目录
也称为深度遍历
import os
def stackGetAllDir(path):
if not os.listdir(path):
return
liststack = [path]
listsuojin = [0]
print(liststack)
while len(liststack) != 0:
path = liststack.pop() #路径出栈
suojin = listsuojin.pop() #缩进空格个数出栈
print(' ' * suojin, os.path.basename(path))
if os.path.isdir(path):
for i in os.listdir(path): #遍历路径下的全部文件
listsuojin.append(suojin +4)
liststack.append(os.path.join(path,i)) #文件名拼接成相对路径后入栈
# 遍历当前目录
stackGetAllDir(os.getcwd())
3、 队列模拟递归遍历目录
也被称为广度遍历
import os
import collections
def queueGetAllDir(path=" "):
if not os.listdir(path):
return
queue = collections.deque()
queue.append(path)
while len(queue) != 0:
filePath = queue.popleft()
fileList = os.listdir(filePath) #遍历filePath路径下的目录
for filename in fileList:
absFilePath = os.path.join(filePath,filename) #路径拼接
if os.path.isdir(absFilePath):
print("目录:",filename)
queue.append(absFilePath)
else:
print("文件:",filename)
# 遍历当前目录
queueGetAllDir(os.getcwd())
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号
关注我,我们一起成长~~
最新文章
- nginx之location匹配优先级和安全问题
- Java设计模式之单例
- iOS autolayout 代码,自定义间距
- 使用pl/sql監控PROCEDURE執行時間
- 为什么我们可以使用while(~scanf(";%d";))读到文件末尾
- Setup Factory 打包.netframework 2.0
- SQLServer 2008以上误操作数据库恢复方法——日志尾部备份(转)
- SGU 172.eXam(二分图染色)
- 5分种让你了解javascript异步编程的前世今生,从onclick到await/async
- Scala中柯里化函数
- comtypes加word 2013批量将pdf转换为doc
- iOS监听模式系列之iOS开发证书、秘钥
- Javascript高级编程学习笔记(95)—— WebGL(1) 类型化数组
- python vs vscode问题汇总
- vue中父组件给子组件额外添加参数
- laravel表单验证
- 11-15 dom 动态创建节点
- Razor - 标记简述
- 解决使用Properties读取中文乱码问题
- Delphi基础语法
热门文章
- NoActionBar主题下如何添加OptionsMenu
- Go gin框架 使用swagger生成API文档
- 手把手教你ASP.NET Core:使用Entity Framework Core进行增删改查
- Harmony OS 开发避坑指南——DevEco Device Tool 安装配置
- vue项目的elementui的form表单label的对齐方式和 el-date-picker 的长度设置
- c#类(class)
- 【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数
- IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理
- XML流操作
- 多测师讲解jmeter _图片详解_(全)高级讲师肖sir