头歌python实训通关六——目录遍历

第1关:深度优先遍历目录

任务描述

本关任务:深度优先递归遍历文件夹,如果是文件就直接输出当前文件绝对路径,如果是文件夹,就输出当前文件夹路径,然后接着遍历该子文件夹,直到指定文件夹被全部遍历完。

相关知识

为了完成本关任务,你需要掌握:1.os模块中相关文件目录操作。2.深度遍历算法

编程要求

根据提示,在右侧编辑器补充代码,遍历文件夹,并输出文件夹下的文件和目录。

编程提示

  1. os.listdir返回的列表是无序的,需要对其进行排序后再进行递归遍历,保证输出结果的唯一性。
  2. 测试输出中的.gitkeep可以忽略,这是平台在每个目录下自带的一个文件

测试说明

平台会对你编写的代码进行测试:

测试目录结构:

输出: c:pytestA.py c:pytestB.txt c:pytestD1 c:pytestD1E1 c:pytestD1F.txt c:pytestD2 c:pytestD2E2 c:pytestaby.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.广度遍历算法

编程要求

根据提示,在右侧编辑器补充代码,遍历文件夹,并输出文件夹下的文件和目录。

编程提示

  1. os.listdir返回的列表是无序的,需要对其进行排序后再进行递归遍历,保证输出结果的唯一性。
  2. 测试输出中的.gitkeep可以忽略,这是平台在每个目录下自带的一个文件

测试说明

平台会对你编写的代码进行测试:

测试输入目录结构如图所示:

输入: c: est 输出: c:pytestA.py c:pytestB.txt c:pytestD1 c:pytestD2 c:pytestaby.jpeg c:pytestD1E1 c:pytestD1F.txt c:pytestD2E2

输入: 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)