Steven Bethard wrote:
> the.theorist wrote:
> > I was writing a small script the other day with the following CLI
> > prog [options] [file]*
> >
> > I've used getopt to parse out the possible options, so we'll ignore
> > that part, and assume for the rest of the discussion that args is a
> > list of file names (if any provided).
> >
> > I used this bit of code to detect wether i want stdinput or not.
> >
> > if len(args)==0:
> >     args = [ sys.stdin ]
> >
> > Now in my main loop I've written:
> >
> > for file in args:
> >     for line in open( file ):
> >         #do stuff
>
> You should probably write:
>
> if not args:  # note that len(args) == 0 is repetitively redundant, over
>                # and over again, in a reiterative manner
>      files = [sys.stdin]
> else:
>      files = (open(filename) for filename in args)
>
> ...
>
> for fileobj in files:  # using the name 'file' is a bad idea since it
>                         # shadows the builtin 'file'
>      for line in fileobj:
>          # do stuff
>
>
> STeVe

I'll keep both those in mind for future programs.
my current fix has been

if not args:
    args = [ sys.stdin ]
else:
    map( open, args )

and then a modification to the main loop, as you proposed.

I thought that one day I might run into a problem opening too many
files though (esp if i used xargs in a pipe). And it just _feels_
better to open and close as I loop over the files list, rather than
open everything at the get go.

OH, i've noticed you used a generator that takes care of that. Except,
the machine I'm working on is currently stuck at Python 2.3. Still,
I'll keep your suggestions in mind for future coding.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to