如何用pathlib.glob()仅匹配符合*_data模式的目录
用pathlib.glob()精准匹配*_data模式的目录
首先明确:pathlib的glob语法里,**模式末尾加/**是专门用来匹配目录的,理论上不会返回文件。你遇到的问题大概率是操作细节出了问题,下面给你解决思路和正确写法:
正确的当前目录匹配写法
直接用末尾带斜杠的模式,就能只捞目录,不用额外判断:from pathlib import Path cwd = Path.cwd() # 只匹配当前目录下以_data结尾的目录 data_dirs = list(cwd.glob('*_data/'))执行这段代码后,
data_dirs里应该只有那3个目标目录,不会包含那个同名模式文件。排查你为啥拿到了文件
如果你还是拿到了文件,检查这几点:- 确认那个"同名模式文件"的文件名是不是真的不带
/——多数操作系统不允许文件名含/,如果是你手动命名时加了,那属于异常情况。 - 检查当前工作目录是不是你以为的那个——打印
cwd.resolve()看看实际路径,避免跑错了目录。 - 有没有可能是符号链接?如果是指向目录的软链接,会被这个模式匹配到,但指向文件的软链接不会。
- 确认那个"同名模式文件"的文件名是不是真的不带
递归匹配所有子目录里的目标目录
如果要递归查找所有子目录中的*_data目录,用**通配符加上recursive=True(Python 3.10+可以省略recursive=True,但加上更稳妥):data_dirs_recursive = list(cwd.glob('**/*_data/', recursive=True))极端情况的兜底方案
如果你碰到了低版本Python的bug(比如3.8及以前的小概率问题),可以用生成器表达式做兜底,但这应该是没必要的:data_dirs = [p for p in cwd.glob('*_data') if p.is_dir()]
内容的提问来源于stack exchange,提问作者buhtz
相关产品推荐
相关产品推荐

