搜索基本思路——深度遍历和广度遍历

欢迎关注,敬请点赞!

【关键字】:

  • 目录深度遍历
  • 目录广度遍历
  • 递归函数
  • 生成式

【摘要】:

  • 用递归函数实现目录的深度遍历
  • 用循环实现目录的广度遍历
  • 本文使用的主要函数:(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
'''

总结:

  • 熟练掌握变量、对象和函数等基础知识,磨刀不误砍柴工。

    欢迎关注,敬请点赞!
    返回顶部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值