代码不长,并且加了很多注释,就不再多说明了。
from os import listdir
from os.path import join, isfile, isdir
def listDirWidthFirst(directory):
'''广度优先遍历文件夹'''
#使用列表模拟双端队列,效率稍微受影响,不过关系不大
dirs = [directory]
#如果还有没遍历过的文件夹,继续循环
while dirs:
#遍历还没遍历过的第一项
current = dirs.pop(0)
#遍历该文件夹
#如果是文件就直接输出显示
#如果是文件夹,输出显示后,标记为待遍历项
for subPath in listdir(current):
path = join(current, subPath)
if isfile(path):
print(path)
elif isdir(path):
print(path)
dirs.append(path)
def listDirDepthFirst(directory):
'''深度优先遍历文件夹'''
#遍历文件夹
#如果是文件就直接输出
#如果是文件夹,就输出显示,然后递归遍历该文件夹
for subPath in listdir(directory):
path = join(directory, subPath)
if isfile(path):
print(path)
elif isdir(path):
print(path)
listDirDepthFirst(path)
directory = r'F:\test'
listDirWidthFirst(directory)
print('='*30)
listDirDepthFirst(directory)
由于手机屏幕大小不同,很难有统一的排版方式,考虑了一下,对于较短的代码,我把截图一起发上来,这样比较好对照,尤其是代码的缩进。
代码运行结果类似于下面图中的样子: