Python 遍历文件夹下所有文件及子文件夹

Python 遍历文件夹下所有文件及子文件夹

Python 遍历文件夹下所有文件及子文件夹

在开发中,经常会遇到需要遍历文件夹下所有文件及子文件夹的情况。Python 提供了多种方法来实现这个功能,本文将介绍两种常用的方法:递归遍历和非递归遍历。

1. 递归遍历文件夹

递归遍历是一种常见的遍历文件夹的方法,通过递归的方式深度遍历文件夹下的所有文件及子文件夹。

import os

def traverse_folder_recursive(folder_path):
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            print(file_path)

上述代码首先导入了 os 模块,然后定义了一个名为 traverse_folder_recursive 的函数。该函数接收一个文件夹路径作为参数,并使用 os.walk() 方法遍历该文件夹及其子文件夹。

在遍历过程中,os.walk() 方法会返回一个三元组 (root, dirs, files)。其中 root 表示当前遍历的文件夹路径,dirs 表示该文件夹下的子文件夹列表,files 表示该文件夹下的文件列表。我们可以通过遍历 files 来获取文件路径,并使用 os.path.join() 方法将文件名与文件夹路径拼接起来,得到完整的文件路径。

接下来,我们可以对每个文件路径执行相应的操作,例如输出文件路径,或进行其他处理。

执行以下代码进行测试:

folder_path = 'path/to/your/folder'
traverse_folder_recursive(folder_path)

以上代码会遍历指定文件夹下的所有文件及子文件夹,并输出每个文件的完整路径。

2. 非递归遍历文件夹

除了递归遍历,我们还可以使用非递归的方法来遍历文件夹。非递归遍历使用栈(Stack)的数据结构来实现。

import os

def traverse_folder_iterative(folder_path):
    stack = [folder_path]

    while len(stack) > 0:
        current_path = stack.pop()

        for file in os.listdir(current_path):
            file_path = os.path.join(current_path, file)

            if os.path.isdir(file_path):
                stack.append(file_path)
            else:
                print(file_path)

上述代码中,我们定义了一个名为 traverse_folder_iterative 的函数,该函数接收一个文件夹路径作为参数。首先,我们创建一个空的栈 stack,并将初始文件夹路径加入栈中。

然后,我们使用一个 while 循环来处理栈中的每个文件夹路径。在每次循环中,我们从栈中取出一个文件夹路径 current_path

接下来,我们使用 os.listdir() 方法获取当前路径下的所有文件和文件夹,并对其进行遍历。对于每个文件或文件夹,我们使用 os.path.join() 方法获取完整的路径,并判断是文件夹还是文件。

如果是文件夹,则将其路径加入栈中,以便后续继续遍历。如果是文件,则执行相应的操作,例如输出文件路径。

执行以下代码进行测试:

folder_path = 'path/to/your/folder'
traverse_folder_iterative(folder_path)

以上代码会遍历指定文件夹下的所有文件及子文件夹,并输出每个文件的完整路径。

3. 总结

本文介绍了两种常用的遍历文件夹的方法:递归遍历和非递归遍历。递归遍历通过深度优先的方式遍历文件夹及其子文件夹,而非递归遍历则使用栈来实现。

在实际开发中,根据具体的需求选择合适的方法进行文件夹遍历操作。递归遍历相对简单,但对于文件夹层级较深或文件夹内文件较多的情况,可能会导致递归层级过深或消耗过多内存。非递归遍历则可以避免这些问题,但相对复杂一些。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程