[英]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獲得。
您可以在這里找到它們: 使用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.