如何在Python中使用Glob()函数递归查找文件?
在Python中,如果我们需要递归地查找某个目录下所有的符合特定模式的文件,那么可以使用glob()函数。它是Python标准库中的一个文件查找工具,可以根据指定的模式匹配文件路径,支持递归查找。
阅读更多:Python 教程
Glob()函数基础用法
glob()函数位于Python的glob模块中,在调用函数之前需要先导入模块:
import glob
然后,可以使用文件路径通配符(如*
和?
)匹配需要查找的文件。例如:
files = glob.glob('/path/to/files/*.txt')
print(files)
上述代码将会查找/path/to/files
目录下所有以.txt
为后缀的文件,并返回一个列表,列表中包含了所有符合条件的文件路径。可以使用for
循环来遍历这个列表,对每个文件进行操作。例如:
for file in files:
# 进行文件操作
支持递归查找
在查找文件的时候,glob()函数支持路径递归查找。它可以递归地查找指定目录下的所有子目录,直到找到符合模式匹配的文件为止。
例如,在查找当前目录(即'.'
)和其所有子目录下的所有.csv
文件时,可以这么写:
files = glob.glob('./**/*.csv', recursive=True)
print(files)
上述代码中,'./**/*.csv'
表示要查找的文件模式,其中./
表示当前目录,**/
表示递归查找所有子目录,.csv
表示查找后缀为.csv
的文件。recursive=True
表示启用递归查找。
注意,在递归查找时,需要将recursive=True
参数设置为True
,否则将无法递归查找。
手动递归查找
除了使用glob()函数支持的递归查找方式外,还可以手动实现递归查找。即通过递归函数来遍历指定目录下所有的子目录,直到找到符合条件的文件为止。
例如,以下代码将递归查找指定目录下所有符合特定模式的文件,并将它们存储在列表中:
import os
def recursive_file_search(directory, pattern):
matches = []
for root, dirnames, filenames in os.walk(directory):
for filename in filenames:
if filename.endswith(pattern):
matches.append(os.path.join(root, filename))
return matches
matches = recursive_file_search('/path/to/directory', '.txt')
print(matches)
上述代码中,os.walk(directory)
表示对directory
目录以及其所有子目录进行深度优先遍历,遍历时返回三元组(dirpath, dirnames, filenames):
dirpath
:字符串类型,表示当前所在的文件夹路径dirnames
:列表类型,包含dirpath目录下的所有子目录名称filenames
:列表类型,包含dirpath目录下所有的文件名称
对于每个非目录文件,我们可以通过判断其文件后缀是否符合要求来决定是否加入结果列表中。
结论
在Python中,查找符合某种模式的文件是一项非常常见的操作,glob()函数封装了这一过程,同时支持递归查找和手动递归查找,可以帮助我们更方便地完成文件查找任务。在使用时,应确保参数传递正确,并针对具体的需求选择合适的查找方式。