recursive glob

Egor Bolonev ebolonev at front.ru
Sun Jun 22 21:12:25 EDT 2003


Hi all.

I have the recursive function glob(rec_glob), and I want to transform it
using yield
statement(get rid of lists - l and d).

yield func work incorrect an I can't fix it - please help me

Is there other implements for recursive glob?

===========================================
using lists
===========================================
def rec_glob_get_dirs(path):
    d=[]
    try:
        for i in os.listdir(path):
            if os.path.isdir(path+i):
                d.append(os.path.basename(i))
    except:pass
    return d

def rec_glob(path,mask):
    l=[]
    if path[-1]!='\\':
        path=path+'\\'
    for i in rec_glob_get_dirs(path):
        l=l+rec_glob(path+i,mask)
    try:
        for i in os.listdir(path):
            ii=i
            i=path+i
            if os.path.isfile(i):
                if fnmatch.fnmatch(ii,mask):
                    l.append(i)
    except:pass
    return l
===========================================


===========================================
using yield
===========================================
import os,fnmatch

def rec_glob_get_dirs(path):
    try:
        for i in os.listdir(path):
            if os.path.isdir(path+i):
                yield os.path.basename(i) # work ok
    except:pass

def rec_glob(path,mask):
    if path[-1]!='\\':
        path=path+'\\'
    for i in rec_glob_get_dirs(path):
        rec_glob(path+i,mask)
    try:
        for i in os.listdir(path):
            ii=i
            i=path+i
            if os.path.isfile(i):
                if fnmatch.fnmatch(ii,mask):
                    yield i # :-(
    except:pass

if __name__ == '__main__':
    f=open('log','wb')
    for i in rec_glob('C:\\python23\\lib','*'):
        f.write(i+'\n')
    f.close()
    print 'Done.'
    #while 1:pass
===========================================

--
    Egor






More information about the Python-list mailing list