more os.walk() issues... probably user error

Kent Johnson kent37 at tds.net
Wed Feb 16 12:08:47 EST 2005


rbt wrote:
> rbt wrote:
> 
>> This function is intended to remove unwanted files and dirs from 
>> os.walk(). It will return correctly *IF* I leave the 'for fs in 
>> fs_objects' statement out (basically leave out the entire purpose of 
>> the function).
>>
>> It's odd, when the program goes into that statment... even when only a 
>> 'pass', and nothing else is present, nothing is returned. Why is that? 
>> I'm testing Python 2.4 on Linux x86 and WinXP. Results are the same on 
>> either platform.
>>
>>     def build_clean_list(self, path):
>>
>>         file_skip_list = ['search_results.txt']
>>         dir_skip_list = ['dev', 'proc', 'Temporary Internet Files']
>>
>>         fs_objects = os.walk(path, topdown=True)

fs_objects is a generator, not a list. This loop is exhausting fs_objects, so when you return 
fs_objects is at the end of iteration, there is nothing left.

>> ##      for fs in fs_objects:
>> ##
>> ##            for f in fs[2]:
>> ##                if f in file_skip_list:
>> ##                    print f
>> ##                    fs[2].remove(f)
>> ##
>> ##            for d in fs[1]:
>> ##                if d in dir_skip_list:
>> ##                    print d
>> ##                    fs[1].remove(d)

Add this here:
                  yield fs

and take out the return. This turns build_clean_list() into a generator function and you will be 
able to iterate the result.

Kent

>>
>>         return fs_objects
>>
>>
> 
> Just to clarify, it's wrong of me to say that 'nothing is returned'... 
> in either case, this is what is returned:
> 
> Here's what was returned and its type:
> ----------------------------------------
> <generator object at 0x407dbe4c>
> <type 'generator'>
> ----------------------------------------
> 
> But, I can't iterate over the returned object when I descend into the 
> for statement I mentioned above.
> 



More information about the Python-list mailing list