finding an exact match of filenames

Peter Otten __peter__ at web.de
Sat Oct 16 10:53:43 CEST 2010


jimgardener wrote:

> I am trying to code a function that takes a directory name and a name
> string and try to return a list of fully qualified names of all files
> in the directory having an exact match of name.
> 
> example,
> I have these files in the directory,
> 'googlegroup_python__111.txt',
> 'googlegroup_python__112.txt',
> 'googlegroup_python_django__111.txt',
> 'googlegroup_python_django__112.txt',
> 'googlegroup_python_grok__111.txt',
> 
> When I call
> get_filenames('mydir', 'googlegroup_python' )
> 
> I expect to get a list like
> ['/mydir/googlegroup_python__111.txt', '/mydir/
> googlegroup_python__112.txt']
> 
> but not the other three.
> 
> I was careless when I coded the method as
> 
> def get_filenames(dirname,filenamestr):
>     match_filenames=[dirname+os.sep+x for x inos.listdir(dirname) if
> x.startswith(filenamestr)]
>     return match_filenames
> 
> because this would return all 5 of the above filenames.I think reg
> expression maybe the way to do this..but not very sure as to how I can
> do it..
> 
> Any help or suggestions greatly appreciated
> thanks
> jim

Try the glob module first:

>>> import os, glob
>>> print "\n".join(os.listdir("mydir"))
googlegroup_python_django__111.txt
googlegroup_python__112.txt
googlegroup_python_grok__111.txt
googlegroup_python_django__112.txt
googlegroup_python__111.txt

>>> print "\n".join(glob.glob("mydir/googlegroup_python__???.txt"))
mydir/googlegroup_python__112.txt
mydir/googlegroup_python__111.txt

If glob() isn't selective enough you may have to resort to regular 
expressions.

Peter



More information about the Python-list mailing list