pythonglobrecursive-datastructuresfnmatch

Get also elements that don't match fnmatch


I'm using a recursive glob to find and copy files from a drive to another

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

Works fine. But I also want to have access to the elements that don't match the filter.

Can someone offer some help? I could build a regex within the loop, but there must be a simpler solution, right?


Solution

  • If order doesn't matter, use a set:

    goodfiles = fnmatch.filter(files, pattern)
    badfiles = set(files).difference(goodfiles)