Определение, находится ли папка в пути к файлу - PullRequest
0 голосов
/ 01 июня 2011

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

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

С документы :

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

Итак, переберите свой список и удалите подходящие записи.

0 голосов
/ 01 июня 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
          ]
...