Я работаю над сценарием резервного копирования на Python и хотел бы, чтобы он мог игнорировать папки. Поэтому у меня есть список папок, которые следует игнорировать, т.е. ['Folder 1', 'Folder3']
. Я использую os.walk
и пытаюсь заставить его пропускать любую папку в списке игнорируемых папок или иметь любую из игнорируемых папок в качестве родительского каталога. Кто-нибудь делал это раньше, поскольку примеры, которые я видел, не работают и часто заканчиваются созданием пустой папки?
Определение того, находится ли папка в пути к файлу
Ответы (2)
Из документов:
Когда topdown равно
True
, вызывающая сторона может изменить список имен каталогов на месте (возможно, используяdel
или назначение среза), аwalk()
будет выполнять рекурсию только в подкаталоги, имена которых остаются в именах каталогов; это можно использовать для сокращения поиска, установления определенного порядка посещения или даже для информированияwalk()
о каталогах, которые вызывающий объект создает или переименовывает, прежде чем он снова возобновитwalk()
работу.
Итак, повторите свой список и удалите записи, которые соответствуют.
После следующего заявления
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
]