Определение того, находится ли папка в пути к файлу

Я работаю над сценарием резервного копирования на Python и хотел бы, чтобы он мог игнорировать папки. Поэтому у меня есть список папок, которые следует игнорировать, т.е. ['Folder 1', 'Folder3']. Я использую os.walk и пытаюсь заставить его пропускать любую папку в списке игнорируемых папок или иметь любую из игнорируемых папок в качестве родительского каталога. Кто-нибудь делал это раньше, поскольку примеры, которые я видел, не работают и часто заканчиваются созданием пустой папки?


person Dean Barnes    schedule 01.06.2011    source источник
comment
См. этот ответ stackoverflow.com/questions/925056/   -  person Fredrik Pihl    schedule 01.06.2011


Ответы (2)


Из документов:

Когда topdown равно True, вызывающая сторона может изменить список имен каталогов на месте (возможно, используя del или назначение среза), а walk() будет выполнять рекурсию только в подкаталоги, имена которых остаются в именах каталогов; это можно использовать для сокращения поиска, установления определенного порядка посещения или даже для информирования walk() о каталогах, которые вызывающий объект создает или переименовывает, прежде чем он снова возобновит walk() работу.

Итак, повторите свой список и удалите записи, которые соответствуют.

person Ignacio Vazquez-Abrams    schedule 01.06.2011

После следующего заявления

folders = [path+'/'+dir for (path,dirs,files) in os.walk(base) 
                                   for dir in dirs 
                                     if dir not in ['Folder 1', 'Folder3', ...]]

переменная folders должна содержать интересующие вас папки.

Edit1: ... + '/' + ... работает только в Unix-подобных ОС. Я думаю, что есть os.path.join, который выполняет ту же работу независимо от платформы.

Edit2: если вы хотите исключить все подкаталоги каталогов, которые нужно исключить, вы можете попробовать следующее:

exclusions = ['Folder 1', 'Folder3', ...]
folders = [path+'/'+dir for (path,dirs,files) in os.walk(base)
                        if not any([f in path for f in exclusions])
                        for dir in dirs 
                        if dir not in exclusions
          ]
person phynfo    schedule 01.06.2011