How to avoid certain directories when using os.walk?

Dave Angel davea at ieee.org
Fri Oct 30 15:54:29 CET 2009


Chris Rebert wrote:
> On Thu, Oct 29, 2009 at 9:53 PM, Peng Yu <pengyu.ut at gmail.com> wrote:
>   
>> I don't see a way to avoid walking over directories of certain names
>> with os.walk. For example, I don't want os.walk return files whose
>> path include '/backup/'. Is there a way to do so? Otherwise, maybe I
>> will have to make my own program. Thank you!
>>     
>
> Read the docs! (http://docs.python.org/library/os.html#os.walk):
>
> """
> os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
>
>     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).
> [...]
>     When topdown is True, the caller can modify the dirnames list
> in-place (perhaps using del or slice assignment), and walk() will only
> recurse into the subdirectories whose names remain in dirnames; this
> can be used to prune the search, impose a specific order of visiting,
> or even to inform walk() about directories the caller creates or
> renames before it resumes walk() again.
> """
>
> They even include a specific code example of how to skip unwanted
> subdirectories.
>
> Cheers,
> Chris
> --
> http://blog.rebertia.com
>
>   
The other thing to note is that it's easy to build a generator from 
os.walk() with whatever customization you like.  Then the program can 
use the generator the same way as he would use walk, just adding a list 
of directories to skip.

For example (untested)

def mywalk(top, skipdirs=[]):
    for root, dirs, files in os.walk(top):
        for skipdir in skipdirs:
            dirs.remove(skipdir)  # don't visit this directory
        yield root, dirs, files


DaveA 





More information about the Python-list mailing list