我的python函數被賦予了一個(長)的路徑參數列表,每個列表都可能是一個glob。我做了一通過使用glob.glob
這個列表中提取所有匹配的文件名,如:從Python中的fnmatch模式中分離普通文件名
files = [filename for pattern in patterns for filename in glob.glob(pattern)]
這一工程,但我在文件系統中有目錄的表現非常差掛牌運營,目前該操作會增加大約一分鐘(!)到我的程序啓動時間。所以我只想對非平凡的glob模式(即那些不是普通路徑名的模式)進行glob擴展來加速。即
def cheapglob(pattern):
return [pattern] if istrivial(pattern) else glob.glob(pattern)
files = [filename for pattern in patterns for filename in cheapglob(pattern)]
由於glob.glob
基本上沒有一套加上fnmatch.fnmatch
目錄列表,我想這應該是可能以某種方式向fnmatch
給定的字符串是否是一個不平凡的圖案或沒有,但我看不出要做到這一點。
作爲一個後備,我想我可以嘗試在字符串中自己識別這些模式,儘管這很像重新發明輪子,並且容易出錯。但是,這感覺就像那種事情應該有一個優雅的解決方案。
如何「一個沒有字符的模式,fnmatch認爲是特殊的」,然後呢?那些只會匹配自己。這是一個明確的問題。 我沒有隻有一個目錄,我可以一勞永逸地列出。這不會是一個問題。在我提到的問題的1分鐘運行時間內,每個目錄已經每次只列出一次。只有很多,每個列表都很慢。 – amaurea