在python中以递归方式搜索通配符文件夹

Ada*_*han 5 python

你好我试着做点什么

// 1. for x in glob.glob('/../../nodes/*/views/assets/js/*.js'):
// 2 .for x in glob.glob('/../../nodes/*/views/assets/js/*/*.js'):
    print x
Run Code Online (Sandbox Code Playgroud)

有什么办法可以回忆搜索吗?

我已经研究过使用Glob()在Python中递归查找文件?但是os.walk不接受节点和视图之间的上面的通配符文件夹,以及http://docs.python.org/library/glob.html那些非常有用的文档.

谢谢

Oca*_*res 9

警告:这也将选择任何与根文件夹下的节点匹配的文件,即节点/.

import os, fnmatch

def locate(pattern, root_path):
    for path, dirs, files in os.walk(os.path.abspath(root_path)):
        for filename in fnmatch.filter(files, pattern):
            yield os.path.join(path, filename)
Run Code Online (Sandbox Code Playgroud)

由于os.walk不接受通配符,我们走树并过滤我们需要的东西.

js_assets = [js for js in locate('*.js', '/../../nodes')]
Run Code Online (Sandbox Code Playgroud)

locate函数产生与模式匹配的所有文件的迭代器.

替代解决方案:您可以尝试扩展的glob,它会向glob添加递归搜索.

现在你可以写一个更简单的表达式,如:

fnmatch.filter( glob.glob('/../../nodes/*/views/assets/js/**/*'), '*.js' )
Run Code Online (Sandbox Code Playgroud)