我正在研究一個腳本,它將從某個文件夾樹中查找所有* .R3D併爲它們編制索引。我已經看到了很多關於如何最好地抓取文件夾和子文件夾的例子,但它們看起來並不漂亮,而且由於即時通訊工作在服務器上,我希望儘可能減小負載。如何抓取文件夾到索引文件?
我的問題:我想找到最有效的方式抓取文件夾和子文件夾來索引/查找某個文件類型。
我正在研究一個腳本,它將從某個文件夾樹中查找所有* .R3D併爲它們編制索引。我已經看到了很多關於如何最好地抓取文件夾和子文件夾的例子,但它們看起來並不漂亮,而且由於即時通訊工作在服務器上,我希望儘可能減小負載。如何抓取文件夾到索引文件?
我的問題:我想找到最有效的方式抓取文件夾和子文件夾來索引/查找某個文件類型。
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
您可能需要使用一個輔助功能,它包裝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,但有點太複雜,我的口味。在單獨的答案中發佈改進版。 – 2011-12-14 13:59:54
提高對@ 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')]
是你在Linux或Windows服務器上工作?它是否必須是Python解決方案,因爲你用Pyton標記了你的問題? – Oldskool 2011-12-14 13:44:01
OSX,是的,必須是Python。 – Malu05 2011-12-14 13:57:31