在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

我能做些什么来递归地搜索它吗?

我已经研究了使用Glob()在Python中递归地查找文件?但是操作系统。Walk不接受通配符文件夹像上面的节点和视图之间,和http://docs.python.org/library/glob.html docs没有多大帮助。

谢谢

警告:这也将选择在根文件夹nodes/下任何地方匹配模式的文件。

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)

作为操作系统。Walk不接受通配符,我们遍历树并过滤需要的内容。

js_assets = [js for js in locate('*.js', '/../../nodes')]

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

替代方案:您可以尝试扩展glob,它将递归搜索添加到glob中。

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

fnmatch.filter( glob.glob('/../../nodes/*/views/assets/js/**/*'), '*.js' )

我在这里回答了一个类似的问题:fnmatch和递归路径匹配' ** '

您可以使用glob2或formic,它们都可以通过easy_install或pip获得。

GLOB2

你可以在这里找到它们:在Python中使用Glob()递归地查找文件?

我经常使用glob2,例如:

import glob2
files = glob2.glob(r'C:Users**iTunes***.mp4')

为什么不把你的通配符路径分成多个部分呢?

parent_path = glob.glob('/../../nodes/*')
for p in parent_path:
    child_paths = glob.glob(os.path.join(p, './views/assets/js/*.js'))
    for c in child_paths:
        #do something

您可以将上面的一些替换为您想要检索的子资产列表。

或者,如果您的环境提供了find命令,则可以为这类任务提供更好的支持。如果你使用的是Windows操作系统,可能会有类似的程序。

最新更新