Fwd: Python new user question - file writeline error

Shawn Milo Shawn at Milochik.com
Thu Feb 8 13:22:40 EST 2007


On 2/8/07, Jussi Salmela <tiedon_jano at hotmail.com> wrote:
> Shawn Milo kirjoitti:
> > To the list:
> >
> > I have come up with something that's working fine. However, I'm fairly
> > new to Python, so I'd really appreciate any suggestions on how this
> > can be made more Pythonic.
> >
> > Thanks,
> > Shawn
> >
> >
> >
> >
> >
> >
> > Okay, here's what I have come up with:
>
> What follows may feel harsh but you asked for it ;)
>
> >
> >
> > #! /usr/bin/python
> >
> > import sys
> > import re
> >
> > month
> > ={'JAN':1,'FEB':2,'MAR':3,'APR':4,'MAY':5,'JUN':6,'JUL':7,'AUG':8,'SEP':9,'OCT':10,'NOV':11,'DEC':12}
> >
> > infile=file('TVA-0316','r')
> > outfile=file('tmp.out','w')
> >
> > def formatDatePart(x):
> >        "take a number and transform it into a two-character string,
> > zero padded"
> If a comment or doc string is misleading one would be better off without
> it entirely:
>         "take a number": the function can in fact take (at least)
>         any base type
>         "transform it": the function doesn't transform x to anything
>                         although the name of the variable x is the same
>                         as the argument x
>         "two-character string": to a string of at least 2 chars
>         "zero padded": where left/right???
> >        x = str(x)
> >        while len(x) < 2:
> >                x = "0" + x
> You don't need loops for these kind of things. One possibility is to
> replace the whole body with:
>         return str(x).zfill(2)
> >        return x
> >
> > regex = re.compile(r",\d{2}/[A-Z]{3}/\d{4},")
> >
> > for line in infile:
> >        matches = regex.findall(line)
> >        for someDate in matches:
> >
> Empty lines are supposed to make code more readable. The above empty
> line does the contrary by separating the block controlled by the for
> and the for statement
> >                dayNum = formatDatePart(someDate[1:3])
> >                monthNum = formatDatePart(month[someDate[4:7]])
> >                yearNum = formatDatePart(someDate[8:12])
> You don't need the formatDatePart function at all:
>         newDate = ",%4s-%02d-%2s," % \
>                 (someDate[8:12],month[someDate[4:7]],someDate[1:3])
> >
> >                newDate = ",%s-%s-%s," % (yearNum,monthNum,dayNum)
> >                line = line.replace(someDate, newDate)
> >
> >        outfile.writelines(line)
> >
> > infile.close
> > outfile.close
> You have not read the answers given to the OP, have you. Because if you
> had, your code would be:
>         infile.close()
>         outfile.close()
> The reason your version seems to be working, is that you probably
> execute your code from the command-line and exiting from Python to
> command-line closes the files, even if you don't.
>
> Cheers,
> Jussi
> --
> http://mail.python.org/mailman/listinfo/python-list
>


Jussi,

Thanks for the feedback. I received similar comments on a couple of
those items, and posted a newer version an hour or two ago. I think
the only thing missing there is a friendly blank line after my "for
line in infile:" statement.

Please let me know if there is anything else.

Shawn



More information about the Python-list mailing list