这就是我所拥有的:
glob(os.path.join('src','*.c'))
但我想搜索 src 的子文件夹。像这样的东西会起作用:
glob(os.path.join('src','*.c')) glob(os.path.join('src','*','*.c')) glob(os.path.join('src','*','*','*.c')) glob(os.path.join('src','*','*','*','*.c'))
但这显然是有限且笨重的。
pathlib.Path.rglob
在 Python 3.5 中引入pathlib.Path.rglob的模块中使用。pathlib
pathlib
from pathlib import Path for path in Path('src').rglob('*.c'): print(path.name)
如果你不想使用 pathlib,可以使用glob.glob('**/*.c'),但不要忘记传入recursive关键字参数,它会在大目录上使用过多的时间。
glob.glob('**/*.c')
recursive
对于匹配文件以点 ( .) 开头的情况;像当前目录中的文件或基于 Unix 的系统上的隐藏文件,请使用以下os.walk解决方案。
.
os.walk
对于较旧的 Python 版本,用于os.walk递归遍历目录并fnmatch.filter匹配一个简单的表达式:
fnmatch.filter
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename))