Speed ain't bad

Anders J. Munch andersjm at inbound.dk
Sat Jan 1 08:20:06 EST 2005

"Bulba!" <bulba at bulba.com> wrote:
> One of the posters inspired me to do profiling on my newbie script
> (pasted below). After measurements I have found that the speed
> of Python, at least in the area where my script works, is surprisingly
> high.

Pretty good code for someone who calls himself a newbie.

One line that puzzles me:
>     sfile=open(sfpath,'rb')

You never use sfile again.
In any case, you should explicitly close all files that you open. Even
if there's an exception:

    sfile = open(sfpath, 'rb')
        <stuff to do with the file open>

> The only thing I'm missing in this picture is knowledge if my script
> could be further optimised (not that I actually need better
> performance, I'm just curious what possible solutions could be).
> Any takers among the experienced guys?

Basically the way to optimise these things is to cut down on anything
that does I/O: Use as few calls to os.path.is{dir,file}, os.stat, open
and such that you can get away with.

One way to do that is caching; e.g. storing names of known directories
in a set (sets.Set()) and checking that set before calling
os.path.isdir.  I haven't spotted any obvious opportunities for that
in your script, though.

Another way is the strategy of "it's easier to ask forgiveness than to
ask permission".
If you replace:
    if(not os.path.isdir(zfdir)):
    except EnvironmentError:

then not only will your script become a micron more robust, but
assuming zfdir typically does not exist, you will have saved the call
to os.path.isdir.

- Anders

More information about the Python-list mailing list