【面试题】实现文件夹中文件的遍历输出

简介: 【面试题】实现文件夹中文件的遍历输出

p>&nbsp;</p>

<p>在之前的文章中:https://www.cnblogs.com/leiziv5/p/7411091.html,分享了基于python去递归查找文件中的文件。在后续的接触中,可以基于深度遍历和广度遍历来实现 
</p>
<p>

1.深度遍历实现


对应实现思路:


1.创建栈


2.增加路径


3.当栈不为空,处理栈的一个路径


4.遍历路径下面的每一项


5.遇到文件夹加入到栈中


6.知道栈中元素为空,退出


import os
path = '.'
def GetAllDeep(path):
    stack = []
    stack.append(path)
    # 处理栈,当栈为空时结束循环
    while len(stack) != 0:
        # 从栈里取出数据
        DirPath = stack.pop()
        # 目录下所有文件
        num = 0
        file_num = 0
        FileList = os.listdir(DirPath)
        # 循环处理每个文件
        for FileName in FileList:
            FileAbsPath = os.path.join(DirPath,FileName)
            if os.path.isfile(FileAbsPath) == True:
                print("是文件",FileAbsPath)
                num += 1
            else:
                # print("是目录",FileAbsPath)
                stack.append(FileAbsPath)
                file_num += 1
        print('当前文件数量:%s' % num, '当前文件夹数量%s' % file_num, '路径是:%s' % (FileAbsPath))


我们看下最后的结果


image.png


2.广度优先遍历实现思路


1.创建一个队列
2.队列增加文件路径
3.当队列不为空,获取队列
4.遍历某个路径,判断是文件输出,是文件夹加入队列
5.直到队列为空,程序终止运行。


看下最后的代码实现


import os, collections
# 广度遍历目录
def Get_All_Dir_Scope(path:str):
    #创建队列
    queue = collections.deque()
    # 进队
    queue.append(path)
    print("queue =", queue)
    while len(queue) != 0:
        # 出队数据
        File_Path = queue.popleft()
        # print(FilePath)
        # 找出所有的文件
        num = 0
        file_num = 0
        FileNameList = os.listdir(File_Path)
        for fileName in FileNameList:
            fileAbsPath = os.path.join(File_Path, fileName)
            if os.path.isfile(fileAbsPath):
                print("是文件", fileAbsPath)
                num += 1
            else:
                file_num += 1
                queue.append(fileAbsPath)
        print('当前文件数量:%s' % num, '当前文件夹数量%s' % file_num, '路径是:%s' % (fileAbsPath))


 我们去传递一个路径,遍历里面文件


path = '.'
Get_All_Dir_Scope(path)


最后打印结果


image.png


可以看到上面的结果,和我们想要的输出是一致的。


基于广度遍历的方式就实现完毕。其实很简单。

 

相关文章
|
25天前
|
数据安全/隐私保护 Python
Python文件与目录操作:面试中的高频考点
【4月更文挑战第15天】本文介绍了Python文件和目录操作的面试重点,包括文件的读写、目录遍历及权限管理。强调了文件关闭、异常处理、特殊文件判断以及权限位和权限字符串的理解。提供了代码示例,如读写文件、遍历目录和更改文件权限,帮助读者在面试中表现出色。掌握这些技能将对编程求职之路大有裨益。
18 0
|
3月前
|
机器学习/深度学习 算法 Java
递归算法还有哪些是你不知道的----【探讨Java经典遍历问题和面试题】
递归算法还有哪些是你不知道的----【探讨Java经典遍历问题和面试题】
34 1
|
4月前
|
算法 Java C++
数据结构与算法面试题:实现二叉树的遍历(前序、中序、后序、层序)。
数据结构与算法面试题:实现二叉树的遍历(前序、中序、后序、层序)。
22 0
|
4月前
|
设计模式 分布式计算 前端开发
面试官:你可以用 for of 遍历 Object 吗?
面试官:你可以用 for of 遍历 Object 吗?
面试官:你可以用 for of 遍历 Object 吗?
【面试小知识】带你深入了解二叉树的前中序遍历
【面试小知识】带你深入了解二叉树的前中序遍历
|
7月前
|
存储 Java 索引
【面试题精讲】字节码文件的组成
【面试题精讲】字节码文件的组成
|
9月前
|
Java
面试时常常考察的java遍历List、Set、Map方法
面试时常常考察的java遍历List、Set、Map方法
|
9月前
|
Java 关系型数据库 MySQL
阿里面试官(性能优化):描述一下jvm加载class文件的原理机制?
相信很多人对于性能优化都不陌生,为了获得更好的系统性能,或者是为了满足不断增加的业务需求。 都需要用到我们的性能调优。所以性能优化在面试中出现的频率特别高 楼主自认为自己对性能优化相关知识有很多了解,而且因为最近在找工作面试,所以单独复习了很多关于索引的知识。
|
10月前
面试常问:数组遍历forEach和map的区别
一.forEach的用法: 二.map的用法:
|
11月前
|
C++
剑指Offer - 面试题7:重构二叉树 (力扣 - 105、从前序与中序遍历序列构造二叉树)
剑指Offer - 面试题7:重构二叉树 (力扣 - 105、从前序与中序遍历序列构造二叉树)
42 0