Python 遍历磁盘目录的三种方法:递归、栈与队列
本文详细介绍 Python 中遍历磁盘目录的三种核心方法:基于递归的深度优先、利用栈模拟深度优先以及使用队列实现广度优先。通过对比代码逻辑与执行流程,帮助开发者根据实际需求选择高效的目录遍历方案,涵盖文件过滤与路径处理细节。
深度遍历
递归
import os
def get_files(path):
# 判断路径是否存在,如果不存在,函数直接结束
if not os.path.exists(path):
print('路径不存在')
return
# 判断路径是否为文件夹
if not os.path.isdir(path):
print('路径是一个文件')
return
# 这时候,路径是一个文件夹
# 获取文件夹中文件或文件夹的名称
file_list = os.listdir(path)
# 遍历文件夹
for filename in file_list:
# 拼接路径,获取每个次级目录下的文件路径
subpath = os.path.join(path,filename)
if os.path.isfile(subpath):
if os.path.splitext(subpath)[1] == '.py':
print('python文件:{}'.format(subpath))
else:
# 如果filename是文件夹,则调用函数继续遍历
get_files(subpath)
用栈来遍历磁盘
栈的核心特性是后进先出(LIFO)。其工作原理如下:初始路径入栈后,每次弹出栈顶元素进行遍历。若遇到子文件夹,则将其压入栈中。由于每次操作都针对栈顶元素,系统会优先深入处理最新加入的子目录,从而确保在转向同级其他目录之前,完整遍历完当前层级的所有子目录结构。
import os
def get_files(path):
# 判断路径是否存在
if not os.path.exists(path):
print('路径不存在')
return
if not os.path.isdir(path):
print('路径是一个文件夹')
return
# 创建一个列表作为栈
stack = [path]
# 取出栈中的元素
while len(stack) != 0:
path = stack.pop()
file_list = os.listdir(path)
for filename in file_list:
subpath = os.path.join(path,filename)
if os.path.isfile(subpath):
print('python文件:{}'.format(subpath))
else:
stack.append(subpath)
广度遍历磁盘
用队列遍历磁盘
import os
import collections
def get_py_file(path):
# 判断路径是否存在
if not os.path.exists(path):
print('路径不存在')
return
# 判断路径是否是文件夹
if os.path.isfile(path):
print('路径是文件')
return
# path是一个文件夹
# 定义一个空对列
queue = collections.deque()
queue.append(path)
while len(queue) != 0:
# 从队列中获取第一个元素
path = queue.popleft()
# 获取目录下的所有内容
filelist = os.listdir(path)
# 遍历
for filename in filelist:
# 拼接
filepath = os.path.join(path, filename)
if os.path.isfile(filepath):
if os.path.splitext(filepath)[1] == '.py':
print(filepath)
else:
queue.append(filepath)
以上即为 Python 遍历磁盘目录的三种主要实现方式。如需了解更多相关技术细节,欢迎查阅本站其他文章。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









