[Tutor] recursive glob -- recursive dir walk

Kent Johnson kent37 at tds.net
Wed Jun 10 15:08:03 CEST 2009

On Wed, Jun 10, 2009 at 2:28 AM, spir<denis.spir at free.fr> wrote:
> Hello,
> A foolow-up ;-) from previous question about glob.glob().
> I need to 'glob' files recursively from a top dir (parameter). Tried to use os.walk, but the structure of its return value is really unhandy for such a use (strange, because it seems to me this precise use is typical). On the other hand, os.path.walk seemed to meet my needs, but it is deprecated.
> I'd like to know if there are standard tools to do that. And your comments on the 2 approaches below.

I would use os.walk(), with fnmatch.fnmatch() to do the pattern
matching, and write the function as a generator (using yield). It
would look something like this (untested):

import os, fnmatch
def findFiles(topDir, pattern):
  for dirpath, dirnames, filenames in os.walk(topDir):
    for filename in filenames:
      if fnmatch.fnmatch(filename, pattern):
        yield os.path.join(dirpath, filename)

To get a list of matches you would call
  list(findFiles(topDir, pattern))

but if you just want to iterate over the paths you don't need the list.


More information about the Tutor mailing list