第1关:深度优先遍历目录
任务描述
本关任务:深度优先递归遍历文件夹,如果是文件就直接输出当前文件绝对路径,如果是文件夹,就输出当前文件夹路径,然后接着遍历该子文件夹,直到指定文件夹被全部遍历完。
相关知识
为了完成本关任务,你需要掌握:1.os模块中相关文件目录操作。2.深度遍历算法
编程要求
根据提示,在右侧编辑器补充代码,遍历文件夹,并输出文件夹下的文件和目录。
编程提示
- os.listdir返回的列表是无序的,需要对其进行排序后再进行递归遍历,保证输出结果的唯一性。
- 测试输出中的.gitkeep可以忽略,这是平台在每个目录下自带的一个文件
测试说明
平台会对你编写的代码进行测试:
测试目录结构:
输出: c:\pytest\A.py c:\pytest\B.txt c:\pytest\D1 c:\pytest\D1\E1 c:\pytest\D1\F.txt c:\pytest\D2 c:\pytest\D2\E2 c:\pytest\baby.jpeg
#使用深度优先遍历目录
import os
def listDirDepthFirst(path):
for files in os.listdir(path):
filepath=os.path.join(path,files)
if os.path.isdir(filepath):
print(filepath)
listDirDepthFirst(filepath)
else:
print(filepath)
listDirDepthFirst(r'./test')
第2关:广度优先遍历目录
任务描述
本关任务:广度优先递归遍历文件夹,使用列表模拟队列。
相关知识
为了完成本关任务,你需要掌握:1.os模块中相关文件目录操作。2.广度遍历算法
编程要求
根据提示,在右侧编辑器补充代码,遍历文件夹,并输出文件夹下的文件和目录。
编程提示
- os.listdir返回的列表是无序的,需要对其进行排序后再进行递归遍历,保证输出结果的唯一性。
- 测试输出中的.gitkeep可以忽略,这是平台在每个目录下自带的一个文件
测试说明
平台会对你编写的代码进行测试:
测试输入目录结构如图所示:
输入: c:\test 输出: c:\pytest\A.py c:\pytest\B.txt c:\pytest\D1 c:\pytest\D2 c:\pytest\baby.jpeg c:\pytest\D1\E1 c:\pytest\D1\F.txt c:\pytest\D2\E2
输入: test.txt
输出: test.txt is not a directory or does not exist.
import os,collections
def listDirWidthFirst(path):
if os.path.exists(path):
queue=collections.deque()
queue.append(path)
while len(queue) !=0:
filepath=queue.popleft()
filenamelist=os.listdir(filepath)
for filename in filenamelist:
fileabspath=os.path.join(filepath,filename)
if os.path.isfile(fileabspath)==True:
print(fileabspath)
else:
print(fileabspath)
queue.append(fileabspath)
else:
print("%s is not a directory or does not exist."%path)
path = input()
listDirWidthFirst(path)