Перемещаться по каталогам на определенную глубину в Python

Например, я хотел бы искать и печатать каталоги под c://, но перечислять только 1-й и 2-й уровни вниз, которые содержат SP30070156-1.

каков наиболее эффективный способ получить это с помощью python 2 без запуска скрипта через целые подкаталоги (так много в моем случае, что это займет очень много времени)

типичные имена каталогов следующие:

Rooty Hill SP30068539-1 3RD Split Unit AC Project
Oxford Falls SP30064418-1 Upgrade SES MSB
Queanbeyan SP30066062-1 AC

person Ossama    schedule 11.09.2017    source источник
comment
я после питона 2   -  person Ossama    schedule 12.09.2017


Ответы (2)


Вы можете попробовать создать функцию на основе os.walk(). Что-то вроде этого должно помочь вам начать:

import os

def walker(base_dir, level=1, string=None):
    results = []
    for root, dirs, files in os.walk(base_dir):
        _root = root.replace(base_dir + '\\', '') #you may need to remove the "+ '\\'"
    if _root.count('\\') < level:
        if string is None:
            results.append(dirs)
        else:
            if string in dirs:
               results.append(dirs)
    return results

Затем вы можете просто вызвать его с помощью строки = 'SP30070156-1' и уровня 1, а затем уровня 2.

Однако не уверен, что он будет быстрее 40-ки.

person AMC    schedule 11.09.2017

вот код, который я использовал, метод быстро перечисляется, если отфильтровано по ключевому слову, то это еще быстрее

import os


MAX_DEPTH = 1
#folders = ['U:\I-Project Works\PPM 20003171\PPM 11-12 NSW', 'U:\I-Project Works\PPM 20003171\PPM 11-12 QLD']
folders = ['U:\I-Project Works\PPM 20003171\PPM 11-12 NSW']
try:
    for stuff in folders:
        for root, dirs, files in os.walk(stuff, topdown=True):
            for dir in dirs:
                if "SP30070156-1" in dir:
                    sp_path = root + "\\"+ dir
                    print(sp_path)

                    raise Found
            if root.count(os.sep) - stuff.count(os.sep) == MAX_DEPTH - 1:
                del dirs[:]

except:
    print "found"
person Ossama    schedule 11.09.2017