Python 脚本遍历目录及子目录

在日常的开发中,我们经常会遇到需要遍历目录及其子目录的情况。例如,在文件管理、数据处理、日志分析等任务中,需要对整个目录结构进行操作。

Python 提供了多种方式来实现目录遍历功能,本文将介绍其中两种常见的方法:递归遍历和使用 os.walk() 函数。

递归遍历目录

递归遍历是一种常见且简单的方法,它通过递归调用函数来遍历目录及其子目录。下面是一个示例代码:

import os

def traverse_directory(path):
    # 遍历当前目录
    for entry in os.scandir(path):
        if entry.is_file():
            # 处理文件
            print("文件:", entry.name)
        elif entry.is_dir():
            # 处理目录
            print("目录:", entry.name)
            # 递归遍历子目录
            traverse_directory(entry.path)

# 遍历当前目录及其子目录
traverse_directory(".")

在上述代码中,我们定义了一个 traverse_directory() 函数来遍历目录。该函数首先使用 os.scandir() 方法获取当前目录下的所有文件和子目录。然后,对于每个文件和子目录,我们使用 entry.is_file()entry.is_dir() 方法来判断其类型,分别进行相应的处理。

如果是文件,我们可以在 if entry.is_file(): 的代码块中对文件进行处理,例如打印文件名。

如果是子目录,我们可以在 elif entry.is_dir(): 的代码块中对子目录进行处理,例如打印目录名,并递归调用 traverse_directory() 函数来遍历子目录。

这样,我们就可以实现递归遍历目录和子目录的功能。

使用 os.walk() 函数遍历目录

除了递归遍历,Python 还提供了一个更方便的方法来遍历目录及其子目录,即使用 os.walk() 函数。这个函数返回一个生成器,可以逐级遍历目录树。下面是一个示例代码:

import os

def traverse_directory(path):
    for dirpath, dirnames, filenames in os.walk(path):
        for filename in filenames:
            # 处理文件
            print("文件:", os.path.join(dirpath, filename))
        for dirname in dirnames:
            # 处理目录
            print("目录:", os.path.join(dirpath, dirname))

# 遍历当前目录及其子目录
traverse_directory(".")

在上述代码中,我们使用 os.walk() 函数来遍历当前目录及其子目录。函数返回的生成器中的每个元素都是一个三元组 (dirpath, dirnames, filenames),其中 dirpath 是当前目录的路径,dirnames 是当前目录下的子目录列表,filenames 是当前目录下的文件列表。

我们可以通过遍历 filenames 列表来处理文件,通过遍历 dirnames 列表来处理子目录。在示例代码中,我们打印了文件和目录的完整路径,以展示遍历的结果。

使用 os.walk() 函数遍历目录比起递归遍历更加简洁和高效。它自动处理了目录树的细节,无需手动递归调用函数。

总结

本文介绍了两种常见的方法来实现 Python 脚本遍历目录及子目录的功能:递归遍历和使用 os.walk() 函数。递归遍历通过递归调用函数来遍历目录,而 os.walk() 函数则是通过生成器逐级遍历目录树。

无论是哪种方法,都能够很方便地遍历目录及其子目录,并对文件和目录进行相应的处理。在实际开发中,根据具体需求选择合适的方法即可。

希望本文对你理解 Python 脚本遍历目录及子目录有所帮助!

关系图

下图是