zoukankan      html  css  js  c++  java
  • python学习笔记之--广度遍历和深度遍历

    一般我们遍历文件夹有两种方式:深度遍历和广度遍历。

    假设我们有这种一组文件夹:

                   A                                               B     

          C              D                          E                     F  

    C1    C2      D1    D2          E1          E2       F1          F2

    深度优先

    深度优先的遍历顺序:A-C-C1-C2-D-D1-D2-B-E-E1-E2-F-F1-F2

                     返回顺序:C1-C2-D1-D2-C-D-E1-E2-F1-F2-E-F-A-B

    原则:从下到上,从左到右。(本质是递归)

    实例:

    import os
    for root, dirs, files in os.walk("e:\test", topdown=False):
        for name in files:
            print(os.path.join(root, name))
        for name in dirs:
            print(os.path.join(root, name))

    执行结果:

    E:>py -3 b.py

    e: estACC1   #从下往上
    e: estACC2
    e: estADD1
    e: estADD2
    e: estAC
    e: estAD
    e: estBEE1   #再从往右
    e: estBEE2
    e: estBFF1
    e: estBFF2
    e: estBE
    e: estBF
    e: estA
    e: estB

    广度优先

    广度优先的遍历顺序:A-B-C-D-E-F-C1-C2-D1-D2-E1-E2-F1-F2

    原则:横向遍历,先进先出,可以用队列来实现

    实例:

    import os
    
    queue = ["e:\test"]   #将队列定义为要遍历的文件夹
    
    while queue!=[]:   #当队列不为空时执行下面的操作
        path = queue.pop(0)  #定义路径是从头取出的节点
        print(path)
        if os.path.isdir(path):  #判断是否是目录
            for i in os.listdir(path):   #在该路径下给栈添加一个节点
                queue.append(path+'\'+i)

    执行结果:

    E:>py -3 b.py
    e: est
    e: estA
    e: estB
    e: estAC
    e: estAD
    e: estBE
    e: estBF
    e: estACC1
    e: estACC2
    e: estADD1
    e: estADD2
    e: estBEE1
    e: estBEE2
    e: estBFF1
    e: estBFF2

    解析:

    >>> queue = ["e:\test"]
    >>> queue.pop(0)
    'e:\test'
    >>> queue.pop(0)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    IndexError: pop from empty list
    >>> queue
    []
    >>> os.listdir("e:\test")
    ['A', 'B']
    >>>

  • 相关阅读:
    java持续添加内容至本地文件
    ArrayList与LinkedList的区别,如何减少嵌套循环的使用
    linux系统设置允许密码登录
    postgreSQL格式化时间的函数详解
    POSTGRESQL日期函数大全
    RESTful API规范
    ASP.NET Core实践:ABP模块化&统一返回结果
    ASP.NET Core实践:中间件
    Salesforce经历
    Git常用命令整理
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11671568.html
Copyright © 2011-2022 走看看