为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

摇曳的蔷薇 2019-06-15 18:29:02
如何使用GLOB()递归查找文件?这就是我所拥有的: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'))但这显然是有限和笨重的。
查看完整描述

5 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

Python 3.5+

既然您是在一条新的python上,您应该使用pathlib.Path.globpathlib模块。

from pathlib import Pathfor filename in Path('src').glob('**/*.c'):
    print(filename)

如果您不想使用路径库,只需使用glob.glob,但别忘了通过recursive关键字参数

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

早期Python版本

对于较早的Python版本,请使用os.walk递归地遍历目录和fnmatch.filter要与简单表达式匹配:

import fnmatchimport os

matches = []for root, dirnames, filenames in os.walk('src'):
    for filename in fnmatch.filter(filenames, '*.c'):
        matches.append(os.path.join(root, filename))


查看完整回答
反对 回复 2019-06-15
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

类似于其他解决方案,但是使用fnmedi.fnMatch而不是GLOB,因为os.walk已经列出了文件名:

import os, fnmatchdef find_files(directory, pattern):
    for root, dirs, files in os.walk(directory):
        for basename in files:
            if fnmatch.fnmatch(basename, pattern):
                filename = os.path.join(root, basename)
                yield filenamefor filename in find_files('src', '*.c'):
    print 'Found C source:', filename

此外,使用生成器将分配给您处理找到的每个文件,而不是查找所有文件。然后处理它们。


查看完整回答
反对 回复 2019-06-15
  • 5 回答
  • 0 关注
  • 1494 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信