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