使用Python的pathlib模块进行文件搜索和过滤的技巧与缺点分析
1,搜索文件,文件过滤

这里使用 pathlib 模块的 Path.glob 方法,此方法能够用于过滤目标文件,并且以迭代器的形式来返回搜索结果。
pattern: 通配符:
搜索指定目录下所有后缀为 py 的文件,且仅在当前目录进行搜索,不搜索子目录。
搜索指定目录下所有的 py 后缀文件,包括子目录。"**" 模式意味着此目录以及所有子目录,会进行递归搜索。也就是说,它开启了递归通配功能。
文件名可以使用以下符号组合进行模式匹配:
" * " 匹配0个或多个字符
" ? " 仅匹配一个字符
" [] " 匹配指定范围内的字符,如[0-9]匹配数字
2,用法:
1,只遍历当前目录
import pathlib
# 构建一个pathlib.Path()对象
# 指定一个目录起始点:"F:/path_test"
路径对象 p 等于 pathlib 库中的 Path 类创建的对象,其路径为 "F:/path_test"
遍历 F:/path_test 目录,找出其中所有的 py 文件。
# 只遍历当前目录
ret = p.glob("*.py")
for item in ret:
print(item)
""" 运行结果
F:\path_test\01.py
F:\path_test\02.py
"""
2,递归遍历
# ......
遍历 F:/path_test 目录及其子目录中的所有 py 文件。
# 递归遍历所有子目录
ret = p.glob("**/*.py")
for item in ret:
print(item)
""" 运行结果
F:\path_test\01.py
F:\path_test\02.py
F:\path_test\src\11.py
F:\path_test\src\22.py
"""
3,Path.rglob() 递归遍历
# ......
# 遍历 F:/path_test目录及子目录下 所有的 py 文件
# 递归遍历所有子目录
调用 Path.glob()时,就如同在通配符 pattern 前面添加了 "**/" 那样
ret = p.rglob("*.py")
for item in ret:
print(item)
""" 运行结果
F:\path_test\01.py
F:\path_test\02.py
F:\path_test\src\11.py
F:\path_test\src\22.py
"""
缺点:当目录树较大时,Path.glob() 耗时较长。
« 上一篇
java的jdk下载教程,jdk下载方法