欢迎访问宙启技术站
智能推送

如何使用Python中的glob函数查找匹配的文件路径

发布时间:2023-05-19 10:52:23

在Python编程中,经常需要匹配和查找符合某种模式的文件路径,来完成诸如数据读取、处理、保存、备份等任务。Python提供了glob模块来实现这个功能,使用glob模块可以快速方便地找到符合模式的文件路径。

glob函数是glob模块中最主要的函数,该函数用于返回符合模式的文件路径列表,其基本用法是:glob.glob(pathname, recursive=False)。其中pathname表示模式字符串,支持通配符(例如:*、?、[ ]等),可以匹配任意字符、单个字符或是字符组;recursive表示是否递归查找子目录,默认值为False。glob函数返回符合模式的文件路径列表,是一个列表对象。

下面我们将通过一个示例程序,来介绍glob函数的使用方法:

import glob

# 查找当前目录下所有以 .txt 结尾的文件:

txt_files = glob.glob("*.txt")

print(txt_files)

# 查找当前目录及其所有子目录下所有以 .csv 结尾的文件:

csv_files = glob.glob("**/*.csv", recursive=True)

print(csv_files)

在上面的示例中,我们把路径模式作为参数传递给glob函数,并将返回结果赋值给一个变量。 个示例中,我们使用*.txt作为模式查找当前目录下所有以.txt结尾的文件,并将结果存储在txt_files变量中。第二个示例中,我们使用**/*.csv模式作为递归查找子目录,查找当前目录及其所有子目录下所有以.csv结尾的文件,并将结果存储在csv_files变量中。通过输出结果可以看到,glob函数返回的是与模式匹配的文件路径列表。

下面是glob函数常用的一些模式字符串:

模式字符串          匹配方式

*                   匹配0或多个字符

?                   匹配单个字符

[ ]                 匹配中括号内的任一字符

[![a-z]]            匹配不在小写a-z范围内的任一字符

[![0-9]]            匹配不在数字0-9范围内的任一字符

[abc]               匹配a或b或c

[0-9]               匹配0到9中的任一数字

[!a-z]              匹配不在a-z范围内的任一字符

在使用glob函数时,由于pathname参数是模式字符串,因此在编写时需注意细节,例如:

1. 模式字符串不支持路径中使用分隔符,如/或\。如果必须使用,则需替换为系统标准分隔符os.sep。

import os

import glob

# 查找当前目录下所有以.txt结尾的文件:

txt_files = glob.glob("*" + os.sep + "*.txt")

print(txt_files)

2. 模式字符串不区分大小写。如果需要区分大小写,则需自行处理。

import os

import glob

# 查找当前目录下所有以 .txt 后缀名的文件:

txt_files = [f for f in glob.glob("*") if f.lower().endswith(".txt")]

print(txt_files)

总结:

glob函数是Python中一个非常好用的文件查找模块,使用灵活方便,可以快速方便地找到符合模式的文件路径,支持通配符,适用于各种场景的文件查找和处理操作。在使用时,需要注意细节,熟练掌握glob函数的基本使用方法,可以更轻松地完成文件搜索和处理任务。