[Tutor] [Fwd: Re: Find files without __doc__ strings]

Lie Ryan lie.1296 at gmail.com
Tue May 19 07:38:49 CEST 2009


David wrote:
> 
> ------------------------------------------------------------------------
> 
> Subject:
> Re: [Tutor] Find files without __doc__ strings
> From:
> David <david at abbottdavid.com>
> Date:
> Mon, 18 May 2009 14:02:38 -0400
> 
> CC:
> tutor at python.org
> 
> 
> Lie Ryan wrote:
>> David wrote:
>>> spir wrote:
>>>> Le Sat, 16 May 2009 21:46:02 -0400,
>>>> David <david at abbottdavid.com> s'exprima ainsi:
>>>>
>>>>> I am doing an exercise in Wesley Chun's book. Find files in the
>>>>> standard   library modules that have doc strings. Then find the
>>>>> ones that don't, "the shame list". I came up with this to find the
>>>>> ones with;
>> why not __import__() it then test whether its .__doc__ is None?
>>
>> def test(filename):
>>     if __import__(filename).__doc__ is None:
>>         shame_list.append(filename)
>>     else:
>>         fame_list.append(filename)
>>
> Thanks Spir and Lie,
> How about;
> 
> #!/usr/bin/python
> 
> import os
> import glob
> import os.path
> 
> shame_list = []
> fame_list = []
> pypath = "/usr/lib/python2.5/"
> 
> def grab_files():
>     fnames = glob.glob(os.path.join(pypath, '*.py'))
>     fnames.sort()
>     sendall(fnames)
> 
> def sendall(fnames):
>     for filename in fnames:
>         filename = os.path.split(filename)
>         filename = filename[1]
>         filename = os.path.splitext(filename)
>         filename = filename[0]
>         test(filename)
> 
> 
> def test(filename):
>     try:
>         if __import__(filename).__doc__ is None:
>             shame_list.append(filename)
>         else:
>             fame_list.append(filename)
>     except ImportError:
>         pass
> 
> grab_files()
> print 'Shame List: ', shame_list
> 
> How can I do;
> def sendall(fnames):
> [snip]
> More efficient.

I don't know about being "more efficient" but using os.path.basename() 
can save one step:
filename = os.path.splitext(os.path.basename(filename))[0]

and you may try to use os.path.walk() for your grab_files(). 
os.path.walk will walk recursively through subdirectories and grabs 
other stdlib packages you may have missed (note: although it also grabs 
non standard-lib packages; note: you also cannot use glob with it; these 
are tradeoffs, so find out which is easier for you)

Also in this code:

 > def test(filename):
 >     try:
 >         if __import__(filename).__doc__ is None:
 >             shame_list.append(filename)
 >         else:
 >             fame_list.append(filename)
 >     except ImportError:
 >         pass

avoid globals...



More information about the Tutor mailing list