Python(os.walk())
os.walk() 是 Python 中 os 模块提供的一个用于递归遍历目录树的函数。它生成一个三元组 (dirpath, dirnames, filenames),分别包含当前目录路径、子目录列表和文件列表。os.walk() 非常适合用于文件系统操作,比如查找特定类型的文件、复制或删除文件等。
1. 函数定义
os.walk(top, topdown=True, onerror=None, followlinks=False)
参数:
top:必需参数,表示要遍历的目录的路径。topdown:可选参数,布尔值。如果为True(默认),则先遍历顶层目录,再遍历子目录。如果为False,则先遍历子目录,再遍历顶层目录。onerror:可选参数,如果指定,遇到错误时会调用该函数(通常是权限错误)。followlinks:可选参数,布尔值。如果为True,会跟随目录中的符号链接(软链接)。
返回值
os.walk() 返回一个生成器对象,每次迭代会生成一个 (dirpath, dirnames, filenames) 元组,其中:
dirpath:当前遍历到的目录路径(字符串)。dirnames:当前目录下的子目录名称列表。filenames:当前目录下的文件名称列表。
2. 示例代码
假设有以下目录结构:
/example_directory
├── file1.txt
├── file2.txt
└── sub_directory
├── file3.txt
└── file4.txt
使用 os.walk() 遍历目录:
import os
for dirpath, dirnames, filenames in os.walk('/example_directory'):
print(f"当前目录路径:{dirpath}")
print(f"子目录:{dirnames}")
print(f"文件:{filenames}")
print("-" * 20)
输出:
当前目录路径:/example_directory
子目录:['sub_directory']
文件:['file1.txt', 'file2.txt']
--------------------
当前目录路径:/example_directory/sub_directory
子目录:[]
文件:['file3.txt', 'file4.txt']
--------------------
3. 使用场景
-
查找特定类型的文件:
可以使用os.walk()遍历目录树并筛选出特定后缀的文件。target_extension = ".txt" for dirpath, dirnames, filenames in os.walk('/example_directory'): for filename in filenames: if filename.endswith(target_extension): print(os.path.join(dirpath, filename)) -
统计目录中文件的数量:
使用os.walk()统计目录中包含的文件数量。file_count = 0 for _, _, filenames in os.walk('/example_directory'): file_count += len(filenames) print(f"文件总数:{file_count}") -
复制或移动文件:
结合shutil模块,可以使用os.walk()遍历目录并复制或移动文件。
4. 注意事项
- 递归深度控制:
os.walk()无法直接限制递归深度。如果需要控制深度,可以手动检查dirpath的深度或在遍历过程中修改dirnames。 - 软链接循环:如果目录中存在指向父目录的符号链接,设置
followlinks=True可能导致无限循环。在这种情况下,推荐设置为False。
5. 总结
os.walk() 是一个强大的工具,适用于遍历目录结构。通过它,您可以轻松实现各种文件系统相关的操作。

浙公网安备 33010602011771号