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()
是一个强大的工具,适用于遍历目录结构。通过它,您可以轻松实现各种文件系统相关的操作。