Python os.walk() 详解,轻松处理文件和目录遍历
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/
Python os 模块的 walk() 方法以自顶向下或自底向上的方式遍历指定的目录树,从而显示目录树中的文件名。对于目录树中的每个目录,os.walk()
方法都会产生一个包含目录路径、当前目录下的子目录列表和文件名的三元组。
当您使用 Python 进行文件处理和目录遍历时,os.walk()
是一个非常有用的函数。这个函数允许您以递归的方式遍历一个目录树,获取关于目录结构的信息,包括其子目录和文件。接下来,我将详细解释 os.walk()
的工作原理以及如何使用它。
本文的思维导图如下所示:
os.walk() 的基本工作原理
os.walk(top, topdown=True, onerror=None, followlinks=False)
是 os
模块中的一个函数,用于生成遍历目录树的文件名。这个函数返回一个三元组 (dirpath, dirnames, filenames)
。
dirpath
下所有子目录的名字。参数详解
- top:要遍历的顶级目录的路径。
- topdown (可选):如果为
True
(默认值),则从顶级开始向下遍历。如果为False
,则从底部的子目录开始向上遍历。 - onerror (可选):是一个函数,用于错误处理。如果指定,则应该是一个接受单个参数(异常实例)的函数。如果未指定或为
None
,错误将被忽略。 - followlinks (可选):如果为
True
,则会遍历符号链接指向的目录。
使用示例
假设我们有以下目录结构:
my_project/
├── main.py
├── module1
│ ├── __init__.py
│ └── utils.py
└── module2
├── __init__.py
└── helper.py
我们想要遍历 my_project
目录并打印出其结构:
import os
# 指定顶级目录路径
top_path = 'my_project'
# 使用 os.walk() 遍历目录
for dirpath, dirnames, filenames in os.walk(top_path):
print(f"当前目录: {dirpath}")
print("子目录:")
for dirname in dirnames:
print(f" {dirname}")
print("文件:")
for filename in filenames:
print(f" {filename}")
print("-" * 20) # 打印分隔线以区分不同的目录
输出结果将是:
当前目录: my_project
子目录:
module1
module2
文件:
main.py
--------------------
当前目录: my_project/module1
子目录: []
文件:
__init__.py
utils.py
--------------------
当前目录: my_project/module2
子目录: []
文件:
__init__.py
helper.py
--------------------
通过上面这个简单例子,您可以看到 os.walk()
如何能够帮助我们递归地遍历整个 my_project
目录树,并且获取每个目录中的文件和子目录列表。
总结与讨论
os.walk()
函数是 Python 中用于遍历目录树的一个非常实用的工具。这个函数会生成目录树中的文件名,通过在目录树中游走(walk)来完成这一任务。接下来,我们将探讨 os.walk()
实际上是深度优先搜索(DFS)还是广度优先搜索(BFS)。
深度优先搜索(DFS)与广度优先搜索(BFS):
DFS 与 BFS 的区别:
默认情况下,os.walk()
采用自顶向下的方式遍历目录树,可以认为这种方式较类似于深度优先搜索(DFS)。在自顶向下模式下,对于每个目录,它会首先返回该目录中的文件和子目录列表,然后递归进入子目录。os.walk()
实质上是以深度优先搜索(DFS)策略来遍历文件系统的目录树。无论是在默认的自顶向下模式还是可选的自底向上模式中,它都首选深入每个分支直到末端再回溯到其他分支。
📚️ 相关链接:
os.walk() 的详细理解(秒懂)
AI 搜索 – 对 os.walk() 的基本原理和功能进行全面而透彻的调研
作者:叶庭云