python深度遍历和广度遍历_python学习笔记之--广度遍历和深度遍历

本文介绍了Python中遍历文件夹的两种常见方式:深度优先和广度优先。深度优先遵循从下到上、从左到右的原则,使用递归实现;广度优先则横向遍历,采用先进先出的队列实现。通过实例代码展示了两种遍历方法的具体应用。
摘要由CSDN通过智能技术生成

一般我们遍历文件夹有两种方式:深度遍历和广度遍历。

假设我们有这种一组文件夹:

A                                               B

C              D                          E                     F

C1    C2      D1    D2          E1          E2       F1          F2

深度优先

深度优先的遍历顺序:A-C-C1-C2-D-D1-D2-B-E-E1-E2-F-F1-F2

返回顺序:C1-C2-D1-D2-C-D-E1-E2-F1-F2-E-F-A-B

原则:从下到上,从左到右。(本质是递归)

实例:

importosfor root, dirs, files in os.walk("e:\\test", topdown=False):for name infiles:print(os.path.join(root, name))for name indirs:print(os.path.join(root, name))

执行结果:

E:\>py -3 b.py

e:\test\A\C\C1   #从下往上

e:\test\A\C\C2

e:\test\A\D\D1

e:\test\A\D\D2

e:\test\A\C

e:\test\A\D

e:\test\B\E\E1   #再从往右

e:\test\B\E\E2

e:\test\B\F\F1

e:\test\B\F\F2

e:\test\B\E

e:\test\B\F

e:\test\A

e:\test\B

广度优先

广度优先的遍历顺序:A-B-C-D-E-F-C1-C2-D1-D2-E1-E2-F1-F2

原则:横向遍历,先进先出,可以用队列来实现

实例:

importos

queue= ["e:\\test"] #将队列定义为要遍历的文件夹

while queue!=[]: #当队列不为空时执行下面的操作

path = queue.pop(0) #定义路径是从头取出的节点

print(path)if os.path.isdir(path): #判断是否是目录

for i in os.listdir(path): #在该路径下给栈添加一个节点

queue.append(path+'\\'+i)

执行结果:

E:\>py -3 b.py

e:\test

e:\test\A

e:\test\B

e:\test\A\C

e:\test\A\D

e:\test\B\E

e:\test\B\F

e:\test\A\C\C1

e:\test\A\C\C2

e:\test\A\D\D1

e:\test\A\D\D2

e:\test\B\E\E1

e:\test\B\E\E2

e:\test\B\F\F1

e:\test\B\F\F2

解析:

>>> queue = ["e:\\test"]

>>> queue.pop(0)

'e:\\test'

>>> queue.pop(0)

Traceback (most recent call last):

File "", line 1, in

IndexError: pop from empty list

>>> queue

[]

>>> os.listdir("e:\\test")

['A', 'B']

>>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值