import os, fnmatch
def 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 filename
for filename in find_files('src', '*.c'):
print 'Found C source:', filename
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))
与其他解决方案类似,但使用fnmatch.fnmatch而不是glob,因为os.walk已经列出了文件名:
此外,使用生成器可以按找到的文件处理每个文件,而不是查找所有文件,然后处理它们。
我修改了glob模块以支持**递归全局搜索,例如:
https://github.com/miracle2k/python-glob2/
当您希望为用户提供使用**语法的能力时非常有用,因此单独使用os.walk()还不够好。
Python3.5+
因为您使用的是新的python,所以应该使用^{} 模块中的^{} 。
如果不想使用pathlib,只需使用^{} ,但不要忘记传入
recursive
关键字参数。对于以点(.)开头的匹配文件(如当前目录中的文件或基于Unix的系统上的隐藏文件),请使用下面的^{} 解决方案。
较旧的Python版本
对于较旧的Python版本,使用^{} 递归遍历目录,使用^{} 匹配简单表达式:
相关问题 更多 >
编程相关推荐