Hi,
I'm new to Python programming. I've changed the code to below, but still it is 
not working, Could you pls. make the corrections in my code.

import datetime
t = ()
tot = []
min = datetime.date(2008, 1, 1)
max = datetime.date(2012, 12, 31)
for line in open ('test2.txt','r'):
        data = line.rstrip().split()
        a = data[9]
        b = data[4]
        (year, month, day) = b.split('-')
        year = int(year)
        month = int(month)
        day = int(day)
        t = (year,month,day)
                if t < max:
                maxyr = max
                if t > min:
                minyr = min
                t = (a,b,maxyr,minyr)
                tot.append(t)
                print t

Thanks
Sree.

--- On Wed, 3/9/11, Andre Engels <andreeng...@gmail.com> wrote:

> From: Andre Engels <andreeng...@gmail.com>
> Subject: Re: [Tutor] Need help with dates in Python
> To: "nookasree ponamala" <nookas...@yahoo.com>
> Cc: tutor@python.org
> Date: Wednesday, March 9, 2011, 2:16 PM
> On Wed, Mar 9, 2011 at 9:21 AM,
> nookasree ponamala <nookas...@yahoo.com>
> wrote:
> > Hi,
> >
> > I need help in finding the minimum date and maximum
> date in a file.
> > Here is my test file:
> > s.no:   dt1     amt     id1     id2
> > 452     2010-02-20      $23.26      059542  
>      06107
> > 452     2010-02-05      $20.78      059542  
>      06107
> > 451     2010-02-24      $5.99       059542  
>      20151
> > 452     2010-02-12      $114.25     839745  
>      98101
> > 452     2010-02-06      $28.00      839745  
>      06032
> > 451     2010-02-12      $57.00      839745  
>      06269
> >
> > I want to get the minimum and maximum dt1 for each
> id1
> >
> > Required result:
> >
> > id1 mindate maxdate
> > 059542  2010-02-24      2010-02-20
> > 839745  2010-02-06      2010-02-12
> >
> > Code: The code I tried. It doesn't work though.
> >
> > import sys
> > import os
> > t = ()
> > tot = []
> > maxyr = 2012
> > minyr = 2008
> > maxday = 31
> > minday = 1
> > maxmon = 12
> > minmon = 1
> >
> > for line in open ('test2.txt','r'):
> >        data = line.rstrip().split()
> >        a = data[3]
> >        b = data[1]
> >        (year, month, day) = b.split('-')
> >        year = int(year)
> >        month = int(month)
> >        day = int(day)
> > if year > maxyr:
> >        maxyr = year
> > elif year < minyr:
> >        minyr = year
> > if month > maxmon:
> >        maxmon = month
> >        elif month < minmon:
> >        minmon = month
> >        if day > maxday:
> >        maxday = day
> >        elif day < minday:
> >        minday = day
> >        max = (maxyr,maxmon,maxday)
> >        min = (minyr,minmon,minday)
> >        t = (a,b,max,min)
> >        tot.append(t)
> >        print t
> >
> > Could you pls. help me with this.
> 
> I see several things go wrong. Here a list, which may well
> not be complete:
> 
> * You want the mindate and maxdate for each id1, but you
> remember only
> a single minyr, maxyr etcetera. There's no way that that is
> going to
> work.
> * You initialize minyr etcetera to a date before the first
> date you
> will see, nd maxyr etcetera to a date after the last date.
> This means
> that you will never find an earlier respectively later one,
> so they
> would never be changed. You should do it exactly the other
> way around
> - minyr etcetera should be _later_ than any date that may
> occur, maxyr
> etcetera _earlier_.
> * You move "if year > maxyr" back to the left. This
> means that it is
> not part of the loop, but is executed (only) once _after_
> the loop has
> been gone through
> * year < minyear should be "if", not "elif": it is
> possible that the
> new date is both the first _and_ the last date that has
> been found
> (this will be the case with the first date)
> * You change maxyear, maxmonth and maxday independently.
> That is not
> what you are trying to do - you want the last date, not the
> highest
> year, highest month and highest day (if the dates were
> 2001-12-01,
> 2011-11-03 and 2005-05-30, you want the maximum date to be
> 2011-11-03,
> not 2011-12-30). You should thus find a way to compare the
> *complete
> date* and then if it is later than the maxdate or earlier
> than the
> mindate change the *complete date*
> * At the end you show (well, in this case you don't because
> it is
> under "if month > maxmon") a quadruple consisting of
> id1, current
> date, lowest date and highest date - EACH time. You want
> only the
> triple and only after the last date of some value of id1
> has been
> parsed (best to do that after all lines have been parsed)
> * The code as shown will lead to a syntax error anyway
> because you did
> not indent extra after "elif month < minmon:", "if day
> > maxday:" and
> "elif day < minday:".
> 
> 
> 
> 
> -- 
> André Engels, andreeng...@gmail.com
> 


      
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to