你好,我想做一些像
// 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操作系统,可能会有类似的程序。