小编典典

如何使用 glob() 递归查找文件?

all

这就是我所拥有的:

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'))

但这显然是有限且笨重的。


阅读 142

收藏
2022-03-01

共1个答案

小编典典

pathlib.Path.rglob

在 Python 3.5
中引入pathlib.Path.rglob的模块中使用。pathlib

from pathlib import Path

for path in Path('src').rglob('*.c'):
    print(path.name)

如果你不想使用
pathlib,可以使用glob.glob('**/*.c'),但不要忘记传入recursive关键字参数,它会在大目录上使用过多的时间。

对于匹配文件以点 ( .) 开头的情况;像当前目录中的文件或基于 Unix
的系统上的隐藏文件,请使用以下os.walk解决方案。

os.walk

对于较旧的 Python
版本,用于os.walk递归遍历目录并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))
2022-03-01