postprocessing in os.walk

kj no.email at please.post
Tue Oct 13 08:53:56 EDT 2009


In <mailman.1196.1255347115.2807.python-list at python.org> Dave Angel <davea at ieee.org> writes:

>kj wrote:
>> Perl's directory tree traversal facility is provided by the function
>> find of the File::Find module.  This function accepts an optional
>> callback, called postprocess, that gets invoked "just before leaving
>> the currently processed directory."  The documentation goes on to
>> say "This hook is handy for summarizing a directory, such as
>> calculating its disk usage", which is exactly what I use it for in
>> a maintenance script.
>>
>> This maintenance script is getting long in the tooth, and I've been
>> meaning to add a few enhancements to it for a while, so I thought
>> that in the process I'd port it to Python, using the os.walk
>> function, but I see that os.walk does not have anything like this
>> File::Find::find's postprocess hook.  Is there a good way to simulate
>> it (without having to roll my own File::Find::find in Python)?
>>
>> TIA!
>>
>> kynn
>>
>>   
>Why would you need a special hook when the os.walk() generator yields 
>exactly once per directory?  So whatever work you do on the list of 
>files you get, you can then put the summary logic immediately after.

>Or if you really feel you need a special hook, then write a wrapper for 
>os.walk(), which takes a hook function as a parameter, and after 
>yielding each file in a directory, calls the hook.  Looks like about 5 
>lines.

I think you're missing the point.  The hook in question has to be
called *immediately after* all the subtrees that are rooted in
subdirectories contained in the current directory have been visited
by os.walk.

I'd love to see your "5 lines" for *that*.

kj



More information about the Python-list mailing list