Python深度遍历、广度遍历、递归函数遍历目录【详细讲解】
2023-04-18 13:12:54 时间
Python通过os模块可以实现对文件或者目录的遍历,这里想实现这样的效果有三种方法,分别是递归函数遍历目录,栈深度遍历和队列广度遍历。下面就通过这三种方法来演练一下。
通过以下目录结构来演示
1.递归函数遍历目录
import os
path = r'C:UsersAdministratorDesktoppython知识总结1.python自学网-基础教程-视频源码aaa'
def getAll(path, sp=''):
flist = os.listdir(path)
# print(flist)
sp += ' '
for f in flist: # 遍历目录,得到所有文件和目录
if os.path.isdir(os.path.join(path, f)): # os.path.join(path, f)拼接路径,否则只会返回文件名或者目录名
print(sp, '目录', f)
getAll(os.path.join(path, f), sp) # 回调一下原函数处理
else:
print(sp, '文件', f)
getAll(path)
返回内容比较长
文件 111.jpg
文件 123.jpg
目录 a
文件 3.txt
文件 5.html
文件 a.txt
文件 b.txt
目录 f
目录 c
文件 11.txt
目录 t
目录 q
文件 test.py
2.栈结构遍历目录
import os
path = r'C:UsersAdministratorDesktoppython知识总结1.python自学网-基础教程-视频源码aaa'
# 栈结构遍历又可以看做深度遍历def getDeep(path):
# 1.先压栈
stack = []
stack.append(path) # 压栈
# print(stack)
# 2.处理栈中数据,如果为空结束循环
while len(stack) != 0:
# 从栈中取数据/目录
dpath = stack.pop()
# print(dpath)
# 目录下的所有文件和目录
flist = os.listdir(dpath)
# 遍历目录
for fname in flist:
if not os.path.isdir(os.path.join(dpath, fname)):
# 不是目录就打印
print('文件', fname)
else:
# 是目录就压栈
print('目录', os.path.join(dpath, fname))
# 压栈之后for循环结束,再走一遍while循环,只要len(stack) != 0,一直下去
stack.append(os.path.join(dpath, fname))
# 深度遍历很难实现层级关系
getDeep(path)
返回结果:
文件 111.jpg
文件 123.jpg
目录 C:UsersAdministratorDesktoppython知识总结1.python自学网-基础教程-视频源码aaaa
文件 a.txt
文件 b.txt
目录 C:UsersAdministratorDesktoppython知识总结1.python自学网-基础教程-视频源码aaaf
文件 test.py
目录 C:UsersAdministratorDesktoppython知识总结1.python自学网-基础教程-视频源码aaafc
目录 C:UsersAdministratorDesktoppython知识总结1.python自学网-基础教程-视频源码aaaf
目录 C:UsersAdministratorDesktoppython知识总结1.python自学网-基础教程-视频源码aaaf q
文件 11.txt
文件 3.txt
文件 5.html
3.队列遍历目录操作
import os
path = r'C:UsersAdministratorDesktoppython知识总结1.python自学网-基础教程-视频源码aaa'
from collections import *def getWidth(path):
# 创建队列
queue = deque()
# 进队
queue.append(path)
while len(queue) != 0:
# 数据出队
dpath = queue.popleft()
# 遍历目录中所有目录和文件,是目录继续遍历,不是目录打印出来
flist = os.listdir(dpath)
for fname in flist:
if not os.path.isdir(os.path.join(dpath, fname)):
print('文件', fname)
else:
print('目录', fname)
queue.append(os.path.join(dpath, fname))
getWidth(path)
返回结果:
文件 111.jpg
文件 123.jpg
目录 a
文件 a.txt
文件 b.txt
目录 f
文件 test.py
文件 3.txt
文件 5.html
目录 c
目录 t
文件 11.txt
目录 q
相关文章
- Python使用tkinter组件Label显示简单数学公式
- 内网渗透之DCOM横向移动
- 以目标为导向的语义交流的共同语言——一个课程学习框架
- python爬虫前奏【成信笔记】
- HTML 5 File API:文件拖放上传功能
- 教你快速创建 Python 虚拟环境
- pyenv 实现Python多版本自由切换
- 用 Python 对 Excel文件进行批量操作
- Python - 接入钉钉机器人
- Python - 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务
- crontab - 解决 mac 下通过 crontab 设置了 Python 脚本的定时任务却无法运行
- [源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用
- Python科普系列——类与方法(上篇)
- SAP对STO的交货单执行PGI,报错 -Fld selectn for mvmt type 643 acct 400020 differs
- Spring Boot 实现通用 Auth 认证的 4 种方式
- 盘点4种使用Python批量合并同一文件夹内所有子文件夹下的Excel文件内所有Sheet数据
- OushuDB 学习经验分享(三):技术特点
- Java和Python思维方式的不同之处
- Python中日志记录新技能
- 奥比中光Gemini OpenCV—Python使用