当查找文件夹中的文件的时候,使用glob标准库,比使用os.listdir()并且自己判断是否匹配的方式更加高效和优雅。
glob
是 Python 标准库中的一个模块,主要用于查找符合特定模式的文件路径。它提供了文件路径的模式匹配功能,可以用来查找符合特定通配符模式的文件名。
glob
模块的主要功能是基于 Unix shell 风格的路径匹配规则来查找文件,这些规则包括:
*
匹配任意个数的字符(包括空字符)。?
匹配单个字符。[abc]
匹配方括号中列出的任意一个字符。
使用方法
1. 导入 glob
模块
import glob
2. 常用函数:glob.glob()
这个函数返回一个符合指定模式的文件名列表。
import glob
# 匹配当前目录下的所有 `.txt` 文件
files = glob.glob("*.txt")
print(files)
示例解释:
假设当前目录中有 file1.txt
和 file2.txt
,执行上面的代码后输出将是:
['file1.txt', 'file2.txt']
3. 使用通配符 *
和 ?
*
:匹配任意数量的字符。?
:匹配单个字符。
import glob
# 匹配以 `data` 开头、以 `.csv` 结尾的所有文件
csv_files = glob.glob("data*.csv")
print(csv_files)
# 匹配文件名中第三个字符为 `a` 的 `.txt` 文件
txt_files = glob.glob("??a*.txt")
print(txt_files)
4. 递归查找:glob.glob()
+ recursive=True
通过设置 recursive=True
,可以递归地查找子目录中的文件。
import glob
# 递归查找所有目录及子目录下的 `.py` 文件
python_files = glob.glob("**/*.py", recursive=True)
print(python_files)
5. 使用 glob.iglob()
glob.iglob()
与 glob.glob()
类似,但它返回的是一个迭代器,而不是直接返回文件列表。这在处理大量文件时可能会更高效,因为它不会一次性把所有文件加载到内存中。
import glob
# 使用 iglob 返回迭代器,逐个遍历 .txt 文件
for file in glob.iglob("*.txt"):
print(file)
6. 匹配指定路径下的文件
可以使用绝对路径或相对路径来查找指定目录下的文件。
import glob
# 查找 /home/user 目录下的所有 `.log` 文件
log_files = glob.glob("/home/user/*.log")
print(log_files)
7. 组合使用通配符
可以组合使用多个通配符来更精确地匹配文件。
import glob
# 匹配目录下包含数字且以 .txt 结尾的文件
files = glob.glob("*[0-9]*.txt")
print(files)
总结
glob.glob(pattern)
:根据模式返回文件列表。glob.iglob(pattern)
:返回一个迭代器,更节省内存。- 通配符
*
、?
和[]
用来匹配文件名中的任意字符。 recursive=True
可以递归地查找子目录中的文件。
glob
是一个非常实用的模块,特别适合查找符合一定模式的文件集