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


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

任务描述

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

相关知识

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

编程要求

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

编程提示

  1. os.listdir返回的列表是无序的,需要对其进行排序后再进行递归遍历,保证输出结果的唯一性。
  2. 测试输出中的.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.广度遍历算法

编程要求

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

编程提示

  1. os.listdir返回的列表是无序的,需要对其进行排序后再进行递归遍历,保证输出结果的唯一性。
  2. 测试输出中的.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)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值