How to avoid certain directories when using os.walk?

Dave Angel davea at ieee.org
Sat Oct 31 05:37:39 CET 2009


Sean DiZazzo wrote:
> On Oct 29, 10:17 pm, Chris Rebert <c... at rebertia.com> wrote:
>   
>> On Thu, Oct 29, 2009 at 9:53 PM, Peng Yu <pengyu... 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=ue[, onerror=None[, followlinksúlse]]])
>>
>>     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
>>     
>
> You will run into problems however if you want to delete from a tree
> while ignoring certain named directories.  Directories must be empty
> before they can be deleted, so you must use "topdownúlse", but to
> prune a search you must use "topdown=ue".  At least I think that was
> the problem I had with my deletion script a while back.
>
> ~Sean
>
>   
My solution to an analogous problem was to build a list of directories 
to be deleted, then process them in reverse order (use pop()) after 
finishing the walk.

DaveA



More information about the Python-list mailing list