2011-12-14 5 views
0

Im работает над скриптом, который собирается найти все * .R3D из определенного дерева папок и проиндексировать их. Я видел много примеров того, как лучше сканировать папки и вложенные папки, но они не кажутся красивыми, и, поскольку я работаю на сервере, я хочу сохранить как можно меньше нагрузки.Как сканировать папки для индексирования файлов?

Мои вопросы: Я хочу найти наиболее эффективный способ сканирования по папкам и подпапкам для индексации/поиска определенного типа файлов.

+0

Are вы работаете на Linux или Windows-сервере? И это должно быть решение Python, поскольку вы отметили свой вопрос Питоном? – Oldskool

+0

OSX, и да, должен быть Python. – Malu05

ответ

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, но немного сложнее на мой вкус. Добавлено улучшенная версия в отдельном ответе. –

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')] 
+0

Спасибо всем, кто быстро отвечает. Это, по-видимому, выводит имена папок, а не отдельные файлы. определение функции all_files (каталог): для пути, файлы, каталоги в os.walk (каталог): печать файлы для F в директории: выхода os.path.join (путь, е) ' , кажется, сделайте это – Malu05

+2

@ user1095570: получил некоторые вещи в неправильном порядке, теперь нужно исправлять. –

+0

Спасибо @FredFoo за этот ответ. Лучше добавить 'sorted (files)' вместо просто 'files' в третьей строке выше, чтобы сортировать элементы по алфавиту. – Omid1989

Смежные вопросы