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. 使用场景

  1. 查找特定类型的文件:
    可以使用 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))
    
  2. 统计目录中文件的数量:
    使用 os.walk() 统计目录中包含的文件数量。

    file_count = 0
    for _, _, filenames in os.walk('/example_directory'):
        file_count += len(filenames)
    print(f"文件总数:{file_count}")
    
  3. 复制或移动文件:
    结合 shutil 模块,可以使用 os.walk() 遍历目录并复制或移动文件。



4. 注意事项

  • 递归深度控制:os.walk() 无法直接限制递归深度。如果需要控制深度,可以手动检查 dirpath 的深度或在遍历过程中修改 dirnames
  • 软链接循环:如果目录中存在指向父目录的符号链接,设置 followlinks=True 可能导致无限循环。在这种情况下,推荐设置为 False


5. 总结

os.walk() 是一个强大的工具,适用于遍历目录结构。通过它,您可以轻松实现各种文件系统相关的操作。



posted @ 2024-11-02 20:09  做梦当财神  阅读(69)  评论(0编辑  收藏  举报