2011-12-14 71 views
0

我正在研究一個腳本,它將從某個文件夾樹中查找所有* .R3D併爲它們編制索引。我已經看到了很多關於如何最好地抓取文件夾和子文件夾的例子,但它們看起來並不漂亮,而且由於即時通訊工作在服務器上,我希望儘可能減小負載。如何抓取文件夾到索引文件?

我的問題:我想找到最有效的方式抓取文件夾和子文件夾來索引/查找某個文件類型。

+0

是你在Linux或Windows服務器上工作?它是否必須是Python解決方案,因爲你用Pyton標記了你的問題? – Oldskool 2011-12-14 13:44:01

+0

OSX,是的,必須是Python。 – Malu05 2011-12-14 13:57:31

回答

0

os.walk()確實如此。從鏈接

例子:

import os 
from os.path import join, getsize 
for root, dirs, files in os.walk('python/Lib/email'): 
    print root, "consumes", 
    print sum(getsize(join(root, name)) for name in files), 
    print "bytes in", len(files), "non-directory files" 
    if 'CVS' in dirs: 
     dirs.remove('CVS') # don't visit CVS directories 
5

您可能需要使用一個輔助功能,它包裝os.walk,像這樣:

import os 

def filesByPattern(directory, matchFunc): 
    for path,dirs,files in os.walk(directory): 
    for f in filter(matchFunc, path): 
     yield os.path.join(path, f) 

certainFolder = '.' 
allR3DFiles = filesByPattern(certainFolder, lambda fn: fn.endswith('.R3D')) 
+1

+1,但有點太複雜,我的口味。在單獨的答案中發佈改進版。 – 2011-12-14 13:59:54

3

提高對@ phihag的例子:

def all_files(directory): 
    for path, dirs, files in os.walk(directory): 
     for f in files: 
      yield os.path.join(path, f) 

r3d_files = [f for f in all_files(your_directory) 
       if f.endswith('.R3D')] 
相關問題