欢迎关注,敬请点赞!
python基础训练——目录的深度遍历和广度遍历
【关键字】:
- 目录深度遍历
- 目录广度遍历
- 递归函数
- 生成式
【摘要】:
- 用递归函数实现目录的深度遍历
- 用循环实现目录的广度遍历
- 本文使用的主要函数:(1) 列表扩充:
list.extend()
;(2) 目录展开:os.listdir()
;(3)路径拼接:path.join()
;(4) 目录判断:path.isdir()
;
深度遍历:(逐级深挖再跳出)
通过递归函数实现逐级深挖
import os
from os import path
def shengdu(dir_name):
if not path.isdir(dir_name):
print(dir_name,'不是目录')
return
dir_name = path.abspath(dir_name) #绝对目录
file_name = os.listdir(dir_name) #展开成子项列表
for f in file_name:
file_name = path.join(dir_name,f) #将目录名与子项拼接
print(file_name)
if path.isdir(file_name): #如果是目录,进一步递归
shengdu(file_name) #此处使用递归函数
shengdu(r'D:\first_level')
#结果展示:
'''
D:\first_level\dir.PNG
D:\first_level\second_level_1
D:\first_level\second_level_1\third_level
D:\first_level\second_level_1\third_level\week7——for loop.PNG
D:\first_level\second_level_1\相关待消化的内容.xlsx
D:\first_level\second_level_2
D:\first_level\second_level_2\郑州Python-1904--扣丁账号.doc
'''
广度遍历:(先同级遍历,再依次下一级遍历)
返回顶部
使用列表生成式来实现目录名与子项名的拼接
import os
from os import path
def guangdu(dir_name):
if not path.isdir(dir_name):
print(dir_name, '不是目录')
return
dir_name = path.abspath(dir_name) #绝对路径
file_name = [path.join(dir_name,i) for i in os.listdir(dir_name)] #将绝对路径与展开的子项名拼接
while len(file_name):
sub_file_name = file_name.pop(0) #依次弹出第一个子项(可能是文件或目录)
print(sub_file_name)
if path.isdir(sub_file_name): #如果是目录
#将目录名与展开子项名拼接存入列表
sub_file_list = [path.join(sub_file_name,i) for i in os.listdir(sub_file_name)]
file_name.extend(sub_file_list) #将列表扩充到file_name这个列表的后面
guangdu(r'D:\first_level')
#结果展示:
'''
D:\first_level\dir.PNG
D:\first_level\second_level_1
D:\first_level\second_level_2
D:\first_level\second_level_1\third_level
D:\first_level\second_level_1\相关待消化的内容.xlsx
D:\first_level\second_level_2\郑州Python-1904--扣丁账号.doc
D:\first_level\second_level_1\third_level\week7——for loop.PNG
'''
总结:
-
熟练掌握变量、对象和函数等基础知识,磨刀不误砍柴工。
欢迎关注,敬请点赞!
返回顶部