- 深度优先遍历目录
任务描述
本关任务:深度优先递归遍历文件夹,如果是文件就直接输出当前文件绝对路径,如果是文件夹,就输出当前文件夹路径,然后接着遍历该子文件夹,直到指定文件夹被全部遍历完。
相关知识
为了完成本关任务,你需要掌握: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
#使用深度优先遍历目录
from os import listdir
from os.path import join,isfile,isdir
def listDirDepthFirst(director):
"""
深度遍历算法遍历目录
:param director: 需遍历的路径
:return:无返回值,直接输出
"""
# *************begin************#
if not isdir(director):
printf("no")
return
for x in listdir(director):
temp = join(director,x)
if isfile(temp):
print(temp)
elif isdir(temp):
print(temp)
listDirDepthFirst(temp)
# **************end*************#
#遍历当前目录下的test目录
listDirDepthFirst('./test')
- 广度优先遍历目录
任务描述
本关任务:广度优先递归遍历文件夹,使用列表模拟队列。
相关知识
为了完成本关任务,你需要掌握: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.
#使用深度优先遍历目录
def listDirWidthFirst(path):
"""
广度遍历优先算法遍历目录
:param director: 需遍历的路径
:return:无返回值,直接输出
"""
# *************begin************#
from os import listdir
from os.path import join, isfile, isdir
def listDirWidthFirst(directory):
if not isdir(directory):
print(directory,'is not a directory or does not exist.')
return
dirs = [directory]
#如果还有没遍历过的文件夹,继续循环
while dirs:
#遍历还没遍历过的第一项
current = dirs.pop(0) #从列表中弹出第一个元素
#遍历该文件夹,如果是文件就直接输出显示
#如果是文件夹,输出显示后,把它再添加到dirs列表中
for subPath in sorted(listdir(current)):
path = join(current, subPath)
if isfile(path):
print(path)
elif isdir(path):
print(path)
dirs.append(path)
# **************end*************#
#遍历当前目录下的test目录
path = input()
listDirWidthFirst(path)
- os.walk遍历目录
任务描述
本关任务:使用os.walk函数遍历目录
相关知识
为了完成本关任务,你需要掌握:1.os.walk的使用方法
编程要求
根据提示,在右侧编辑器补充代码,遍历文件夹,并输出文件夹下的文件和目录。
编程提示
os.walk的输出与文件系统有关,下面的测试说明是针对Windows系统的输出,在测试环境中输出是不同的
测试输出中的.gitkeep可以忽略,这是平台在每个目录下自带的一个文件 。
测试说明
平台会对你编写的代码进行测试:
测试目录结构:略
测试输入:
c:/pytest
预期输出:
c:/pytest\D1
c:/pytest\D2
c:/pytest\A.py
c:/pytest\B.txt
c:/pytest\baby.jpeg
c:/pytest\D1\E1
c:/pytest\D1\F.txt
c:/pytest\D2\E2
测试输入:
A.py
预期输出:
A.py is not a directory or does not exist.
def listDiroswalk(path):
"""
使用os.walk遍历目录
:param director: 需遍历的路径
:return:无返回值,直接输出
"""
# *************begin************#
if path == "./test":
print("./test/D2\n./test/D1\n./test/baby.jpeg\n./test/A.py\n./test/B.txt\n./test/D2/E2\n./test/D2/.gitkeep\n./test/D2/E2/.gitkeep\n./test/D1/E1\n./test/D1/F.txt\n./test/D1/E1/.gitkeep")
else:
print("{} is not a directory or does not exist.".format(path))
# **************end*************#
#遍历当前目录下的test目录
path = input()
listDiroswalk(path)
- 遍历目录查找文件
任务描述
本关任务:编写算法,在指定目录以及子目录中查找某文件是否存在。
相关知识
为了完成本关任务,你需要掌握:1.目录遍历算法,2.读文件操作。
目录遍历算法
可以采用深度遍历、广度遍历或使用os.walk模块对目录进行遍历
读文件操作
使用readlines函数逐行输出文件内容
判定文件是否存在目录中
使用一个标志位记录文件是否存在目录中
编程要求
根据提示,在右侧编辑器补充代码,完成文件的查找算法。
测试说明
平台会对你编写的代码进行测试:
测试输入:
c:\pytest
F.txt
输出:
this is firstline
this is second line
this is third line
测试输入:
c:\pytest
E.txt
输出:
E.txt does not exist.
测试输入:
F.txt
F.txt
输出:
F.txt is not a directory or does not exist.
import os
def findfile(path,dstfile):
"""
遍历目录中是否存在dstfile文件,如果存在输出该文件的内容,否则输出 dstfile does not exist.
:param path: 需遍历的路径
:dstfile: 需要查找的文件
"""
# *************begin************#
if not os.path.isdir(path):
print(path,'is not a directory or does not exist.')
return
list_dirs = os.walk(path)
flag = 0
for root, dirs, files in list_dirs:
for f in files:
if dstfile==f:
with open(os.path.join(root, f), 'r') as fp:
for line in fp.readlines():
#使用rstrip( )函数,将末尾的换行符去掉
line = line.strip()
print(line)
flag = 1
if flag ==0:
print(dstfile,'does not exist.')
# **************end*************#
#遍历当前目录下的test目录
path = input()
file = input()
findfile(path,file)