[Tutor] critique my script!
Alan Gauld
alan.gauld at freenet.co.uk
Thu Aug 3 19:48:33 CEST 2006
>I didn't know I could place the glob in the os.walk
> traversal. Could you give me an example of how to do
> this?
I'm not sure why you see a problem. A simplified form of your
code is like this:
for root,dirs,files in os.walk(abs_base):
for name in dirs:
path = os.path.join(root, name)
path_list.append(path)
So you create the path list here
for p in path_list:
os.chdir(p)
matched_files = glob.glob(pattern)
then you iterate over it applying glob. Why not combine the lops like:
for root,dirs,files in os.walk(abs_base):
for name in dirs:
path = os.path.join(root, name)
os.chdir(path)
matched_files = glob.glob(pattern)
Doesn't that do the same thing - or am I missing something?
Alan G.
> --- Alan Gauld <alan.gauld at freenet.co.uk> wrote:
>
>> >I created a function that takes a pattern and a
>> base
>> > path and then uses os.walk and glob to traverse
>> > directories starting from the base path and place
>> > files that match the glob pattern in a dictionary.
>>
>> I'm not sure why you are traversing the paths a
>> second time.
>> Why not just apply glob within the os.walk
>> traversal?
>> After all you are putting the path into the path
>> list, then
>> iterating over that list later, why not just apply
>> glob the
>> first time around?
>>
>> > #!/usr/bin/python
>> >
>> > import os, os.path, glob
>> >
>> > def glob_files(pattern, base = '.'):
>> > path_list = []
>> > abs_base = os.path.abspath(base)
>> > path_list.append(abs_base)
>> > for root,dirs,files in os.walk(abs_base):
>> > for name in dirs:
>> > path = os.path.join(root, name)
>> > #print path
>> > path_list.append(path)
>> > globbed = {}
>> > cwd = os.getcwd()
>> > for p in path_list:
>> > os.chdir(p)
>> > matched_files = glob.glob(pattern)
>> > if matched_files != []:
>> > globbed[p] = matched_files
>> > os.chdir(abs_base)
>> > os.chdir(cwd)
>> > return globbed
>>
>> Alan Gauld
>> Author of the Learn to Program web site
>> http://www.freenetpages.co.uk/hp/alan.gauld
>>
>
>
> "I'm the last person to pretend that I'm a radio. I'd rather go out
> and be a color television set."
> -David Bowie
>
> "Who dares wins"
> -British military motto
>
> "I generally know what I'm doing."
> -Buster Keaton
More information about the Tutor
mailing list