【Python】 glob批处理模块的学习
1.什么是glob
模块?
-
在 Python 中,
glob
模块是一个用于文件路径名的模式匹配的工具。它使用简单的通配符规则来匹配文件和目录的路径,这些通配符规则类似于在命令行中使用的文件搜索规则。这使得在处理文件系统中的多个文件或目录时非常方便,可以快速地获取符合特定模式的文件路径列表。
2. 通配符规则
*
(星号)通配符- 示例:假设在当前目录下有
file1.txt
、file2.txt
、data.csv
和report.docx
这些文件。使用glob.glob('*.txt')
将返回['file1.txt', 'file2.txt']
,它只会匹配扩展名为.txt
的文件。 - 功能:
*
可以匹配任意长度(包括零长度)的字符序列。例如,*.txt
表示匹配所有以.txt
为扩展名的文件,不管文件名的前面部分是什么。
?
(问号)通配符-
功能:
?
可以匹配任意单个字符。例如,file?.txt
会匹配像file1.txt
、file2.txt
等文件名,其中?
的位置可以是任意一个字符。 -
示例:如果有
file1.txt
、file2.txt
、fileA.txt
和data.txt
这些文件,glob.glob('file?.txt')
将返回['file1.txt', 'file2.txt', 'fileA.txt']
,它匹配文件名是file
后面跟着一个字符且扩展名为.txt
的文件。
-
[]
(方括号)通配符-
功能:
[]
用于匹配方括号内指定的一组字符中的任意一个。例如,file[123].txt
会匹配file1.txt
、file2.txt
和file3.txt
。 -
示例:假设有
file1.txt
、file2.txt
、file4.txt
和fileA.txt
这些文件,glob.glob('file[123].txt')
将返回['file1.txt', 'file2.txt']
,只匹配文件名中file
后面跟着1
、2
或3
且扩展名为.txt
的文件。
-
3.glob
模块的主要函数
-
-
glob.glob()
函数 - 功能:该函数返回所有匹配指定模式的文件路径的列表。它接受一个表示路径模式的字符串作为参数,在当前目录以及子目录(如果模式包含目录遍历相关的部分)中搜索匹配的文件路径。
- 示例:搜索当前目录下所有的 Python 文件:
-
import glob
python_files = glob.glob('*.py')
print(python_files)
搜索指定目录下(例如data
目录)所有的.csv
文件:
import glob
csv_files_in_data_dir = glob.glob('data/*.csv')
print(csv_files_in_data_dir)
glob.iglob()
函数
- 功能:这是一个生成器函数,它与
glob.glob()
类似,用于返回匹配指定模式的文件路径。但是,它返回的是一个生成器对象,而不是一个列表。这样在处理大量文件路径时,可以节省内存,因为生成器是按需生成元素的,而不是一次性生成所有元素。 - 示例:
import glob
for file_path in glob.iglob('*.jpg'):
print(file_path)
这个示例会逐个打印出当前目录下所有匹配*.jpg
模式的文件路径,而不是将所有路径存储在一个列表中再处理。
使用glob
模块的注意事项
-
路径的相对性质:
glob
函数所使用的路径模式是相对路径,默认是相对于当前工作目录的。如果需要指定绝对路径,需要在模式字符串中提供完整的路径信息。例如,要搜索根目录下的/var/log
目录中的.log
文件,可以使用glob.glob('/var/log/*.log')
。 -
目录的遍历:当模式中包含目录遍历部分(如
**
)时,要注意性能问题。例如,**/*.txt
会遍历当前目录及其所有子目录来查找.txt
文件,这在目录结构复杂且文件数量众多时可能会消耗较多的时间和资源。在 Python 3.5 及以上版本中,**
用于递归地匹配目录。 -
区分大小写:在大多数操作系统中,
glob
模块的匹配是区分大小写的。例如,*.TXT
不会匹配名为file.txt
的文件,只会匹配扩展名为.TXT
的文件(如果有的话)。