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 脚本遍历目录及子目录有所帮助!
关系图
下图是