techie2go wrote:

> i m now updating an sql file

> =================
> but the output is just
> 2003-01-04
> and not
> 
> insert into mobilebill values ('2003-01-04', 'OUT', '91804103253', 34,
> 3.2);
> 
> help me in this regard, what did i do wrong...

You can find out yourself if you throw in some print statements:
> for line in lines:
>     #print line
>     inp=line
>     cre2=re.search('.*(\w{3}\s+\d+\,\s+\d+).*',line)
>     (month,day,year)=cre2.group(1).split();
>     cre3=re.compile(',')
>     day=cre3.sub("",day)
>     year='20'+year
>     repstr=year+'-'+months[month]+'-'+day
      print "X", repstr # OK, so far
>     cre4=re.compile('.*(\w{3}\s+\d+\,\s+\d+).*')      
      print "X", cre4.search(line).group(0) # Oops, matches the whole line
                                            # so it will be replaced by the
                                            # reformatted date
>     line=cre4.sub(repstr,line)
>     print line

The minimal fix is to change cre4

cre4=re.compile('(\w{3}\s+\d+\,\s+\d+)')

And here is an alternative:

import re
import sys

lines = open('mb.sql')

months = {
    "Jan": 1,
    "Feb": 2,
    "Mar": 3,
    "Apr": 4,
    # ...
}
r = re.compile(r"(\w{3})\s+(\d+)\,\s+(\d+)")

def fix_date(match):
    month, day, year = match.groups()
    return "20%02s-%02d-%02s" % (year, months[month], day)

for line in lines:
    sys.stdout.write(r.sub(fix_date, line))

You might also consider performing the conversion in the database.

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

Reply via email to