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

如何使用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'))

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


摇曳的蔷薇
浏览 1497回答 5
5回答

猛跑小猪

Python 3.5+既然您是在一条新的python上,您应该使用pathlib.Path.glob从pathlib模块。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))

慕尼黑8549860

类似于其他解决方案,但是使用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此外,使用生成器将分配给您处理找到的每个文件,而不是查找所有文件。然后处理它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python