code: def filter(self):
          
          self._printer('Standard Walk')
          count = Counter(length=3)
          for directory in self.directory:
              self._printer('Searching ' + directory)
              for root, directories, files in os.walk(directory, topdown=self.topdown):
                  root = root[len(str(directory)) + 1:]
                  self._printer(str(count.up) + ": Explored path - " + str(root), stream=True)
                  if self.filters.validate(root):
                      # Check that non-empty folders flag is on and we're at the max directory level
                      if self.filters.non_empty_folders and self.filters.get_level(root) == self.filters.max_level:
                          # Check that the path is not an empty folder
                          if os.path.isdir(directory + os.sep + root):
                              # Get paths in folder without walking directory
                              paths = os.listdir(directory + os.sep + root)
  
                              # Check that any of the paths are files and not just directories
                              if paths and any(os.path.isfile(os.path.join(directory, p)) for p in paths):
                                  self.add_path(directory, root)
  
                      else:
                          for filename in files:
                              fullname = os.path.join(root, filename)
                              if self.filters.validate(fullname):
                                  # Join the two strings in order to form the full filepath.
                                  self.add_path(directory, fullname)
docs: Called when parallelize is False.
          This function will generate the file names in a directory tree by walking the tree either top-down or
          bottom-up. For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple
          (dirpath, dirnames, filenames).