получить также элемент, который не соответствует fnmatch - PullRequest
3 голосов
/ 27 декабря 2011

Я использую рекурсивный глобус для поиска и копирования файлов с диска на другой

def recursive_glob(treeroot, pattern):
   results = []
   for base, dirs, files in os.walk(treeroot):

      goodfiles = fnmatch.filter(files, pattern)
      results.extend(os.path.join(base, f) for f in goodfiles)

return results

Работает нормально.Но я также хочу иметь доступ к элементам, которые не соответствуют фильтру.

Может кто-нибудь предложить какую-нибудь помощь?Я мог бы построить регулярное выражение в цикле, но должно быть более простое решение, верно?

Заранее спасибо!Lars

Ответы [ 2 ]

4 голосов
/ 27 декабря 2011

Если порядок не имеет значения, используйте набор:

goodfiles = fnmatch.filter(files, pattern)
badfiles = set(files).difference(goodfiles)
1 голос
/ 27 декабря 2011

Также можно использовать другой цикл внутри цикла os.walk:

goodfiles = []
badfiles = []
for f in files:
  if fnmatch.fnmatch(f, pattern):
    goodfiles.append(f)
  else:
    badfiles.append(f)

Примечание. С этим решением вам придется перебирать список файлов только один раз. Фактически, часть os.path.join может быть перемещена в цикл выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...