簡體   English   中英

在python中以遞歸方式搜索通配符文件夾

[英]search in wildcard folders recursively in 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中遞歸查找文件? 但是os.walk不接受節點和視圖之間的上面的通配符文件夾 ,以及http://docs.python.org/library/glob.html那些非常有用的文檔。

謝謝

警告:這也將選擇任何與根文件夾下的節點匹配的文件,即節點/。

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)

由於os.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

FORMIC

您可以在這里找到它們: 使用Glob()在Python中遞歸查找文件?

我經常使用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中,可能會有一個類似的程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM