more os.walk() issues... probably user error
rbt
rbt at athop1.ath.vt.edu
Wed Feb 16 14:43:11 EST 2005
Kent Johnson wrote:
> 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.
That makes sense. Thanks for the explanation. I've never used generators
before.
>
>>> ## 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.
I'll try this.
Will the changes I made (file and dir removals from os.walk()) be
reflected in the generator object? Is it safe to remove objects this way
and pass the results in a generator on to another function? Sorry for
all the questions, I just like to fully understand something before I
start doing it with confidence.
rbt
>
> 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