Python 递归遍历目录下所有文件
1. 引言
在日常编程中,我们经常需要对指定目录下的所有文件进行处理。Python提供了强大的标准库,使得递归遍历目录下所有文件变得非常简单和高效。本文将详细介绍如何使用Python递归遍历目录下的所有文件,并提供一些示例代码。
2. 使用os模块遍历目录
Python的os模块提供了一组函数,用于对操作系统进行操作。其中,os.walk()
函数可以递归地遍历目录下的所有文件和子目录。
import os
def traverse_directory(directory):
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
# 处理文件
process_file(file_path)
在上述代码中,os.walk(directory)
函数返回一个生成器,每次迭代生成一个三元组(root, dirs, files)
。其中,root
是当前遍历的目录路径,dirs
是当前目录下的子目录列表,files
是当前目录下的文件列表。我们可以对files
中的每个文件进行处理。
在process_file(file_path)
函数中,你可以根据自己的需求对文件进行任意操作,比如读取文件内容、修改文件名等。
下面是一个例子,展示如何使用traverse_directory()
函数遍历某个目录下的所有文件,并打印文件路径。
import os
def traverse_directory(directory):
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
print(file_path)
# 遍历当前目录下的所有文件
traverse_directory('.')
运行以上代码,将输出当前目录下的所有文件路径。
3. 使用glob模块遍历目录
除了使用os模块,Python还提供了glob模块用于文件通配符匹配。通过配合使用glob和递归的方式,我们可以轻松地遍历目录下的所有文件。
import glob
def traverse_directory(directory):
for file in glob.glob(directory + '**/*', recursive=True):
if not os.path.isdir(file):
# 处理文件
process_file(file)
在上述代码中,glob.glob()
函数会返回递归地匹配目录下的所有文件,返回一个文件路径列表。我们可以对每个文件进行处理。
下面是一个例子,展示如何使用traverse_directory()
函数遍历某个目录下的所有文件,并打印文件路径。
import glob
def traverse_directory(directory):
for file in glob.glob(directory + '**/*', recursive=True):
if not os.path.isdir(file):
print(file)
# 遍历当前目录下的所有文件
traverse_directory('.')
运行以上代码,将输出当前目录下的所有文件路径。
4. 遍历子目录时排除特定文件或目录
有时候,在遍历目录时我们希望排除特定的文件或目录。在这种情况下,我们可以在遍历过程中增加一些判断条件来过滤掉不需要处理的文件或目录。
例如,我们想要遍历目录并打印所有的Python脚本文件,但是不包括以”test”开头的文件。可以按照以下方式修改traverse_directory()
函数:
def traverse_directory(directory):
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
if file.endswith('.py') and not file.startswith('test'):
print(file_path)
以上代码将只打印目录下以.py
为后缀的文件,并且不包括以test
开头的文件。
在实际使用中,你可以结合正则表达式等方式,编写更复杂的判断条件,以满足自己的需求。
5. 总结
使用Python递归遍历目录下的所有文件是一项非常实用的功能。本文介绍了两种方法:使用os模块和使用glob模块。通过这两种方法,在遍历目录时我们还可以添加过滤条件,以便只处理我们想要处理的文件。