listdir() with mask

grflanagan grflanagan at yahoo.co.uk
Fri Dec 14 08:59:02 EST 2007


On Dec 14, 2:00 pm, "Vladimir Rusinov" <vladi... at greenmice.info>
wrote:
>Is there any easy way to list files using bash-like patterns? Something like
>listfiles("/var/log/*.log"), listfiles("/var/{cache,run}/*").
> On 12/14/07, Jeff McNeil <j... at jmcneil.net> wrote:
>
>
>
> > Sure is.. check out the glob module:
> >http://www.python.org/doc/current/lib/module-glob.html(Official)
> >http://blog.doughellmann.com/2007/07/pymotw-glob.html(PyMOTW)
>
> Thanks a lot!
>

For example:

import fnmatch

DEFAULTPATTERNS = ['*']
DEFAULTIGNOREDIRS = ['.svn']

def find(root=None, patterns=None, ignoredirs=None):
    patterns = patterns or DEFAULTPATTERNS
    if ignoredirs is None:
        ignoredirs = DEFAULTIGNOREDIRS
    for fname in walkdir(root, ignoredirs=ignoredirs):
        for pattern in patterns:
            if fnmatch.fnmatch(fname, pattern):
                yield fname
                break

def findfiles(root=None, patterns=None, ignoredirs=None):
    for f in find(root, patterns, ignoredirs=ignoredirs):
        if os.path.isfile(f):
            yield f

(For walkdir, see os.walk function)
(if root == None: use current working directory)

hth

Gerard



More information about the Python-list mailing list