Python 遍历文件夹下所有文件及子文件夹
在开发中,经常会遇到需要遍历文件夹下所有文件及子文件夹的情况。Python 提供了多种方法来实现这个功能,本文将介绍两种常用的方法:递归遍历和非递归遍历。
1. 递归遍历文件夹
递归遍历是一种常见的遍历文件夹的方法,通过递归的方式深度遍历文件夹下的所有文件及子文件夹。
上述代码首先导入了 os
模块,然后定义了一个名为 traverse_folder_recursive
的函数。该函数接收一个文件夹路径作为参数,并使用 os.walk()
方法遍历该文件夹及其子文件夹。
在遍历过程中,os.walk()
方法会返回一个三元组 (root, dirs, files)
。其中 root
表示当前遍历的文件夹路径,dirs
表示该文件夹下的子文件夹列表,files
表示该文件夹下的文件列表。我们可以通过遍历 files
来获取文件路径,并使用 os.path.join()
方法将文件名与文件夹路径拼接起来,得到完整的文件路径。
接下来,我们可以对每个文件路径执行相应的操作,例如输出文件路径,或进行其他处理。
执行以下代码进行测试:
以上代码会遍历指定文件夹下的所有文件及子文件夹,并输出每个文件的完整路径。
2. 非递归遍历文件夹
除了递归遍历,我们还可以使用非递归的方法来遍历文件夹。非递归遍历使用栈(Stack)的数据结构来实现。
上述代码中,我们定义了一个名为 traverse_folder_iterative
的函数,该函数接收一个文件夹路径作为参数。首先,我们创建一个空的栈 stack
,并将初始文件夹路径加入栈中。
然后,我们使用一个 while
循环来处理栈中的每个文件夹路径。在每次循环中,我们从栈中取出一个文件夹路径 current_path
。
接下来,我们使用 os.listdir()
方法获取当前路径下的所有文件和文件夹,并对其进行遍历。对于每个文件或文件夹,我们使用 os.path.join()
方法获取完整的路径,并判断是文件夹还是文件。
如果是文件夹,则将其路径加入栈中,以便后续继续遍历。如果是文件,则执行相应的操作,例如输出文件路径。
执行以下代码进行测试:
以上代码会遍历指定文件夹下的所有文件及子文件夹,并输出每个文件的完整路径。
3. 总结
本文介绍了两种常用的遍历文件夹的方法:递归遍历和非递归遍历。递归遍历通过深度优先的方式遍历文件夹及其子文件夹,而非递归遍历则使用栈来实现。
在实际开发中,根据具体的需求选择合适的方法进行文件夹遍历操作。递归遍历相对简单,但对于文件夹层级较深或文件夹内文件较多的情况,可能会导致递归层级过深或消耗过多内存。非递归遍历则可以避免这些问题,但相对复杂一些。