rundttm = datetime.now() prevdttm = None thisyear = rundttm.year logf = open(filename, "r") for line in logf: if self.re_raw.match(line): rmat = self.re_raw.match(line) rday, rmon, rhr, rmin = int(rmat.group(1)), self.lu_month[rmat.group(2)], int(rmat.group(3)), int(rmat.group(4)) if prevdttm and datetime(thisyear, rmon, rday, rhr) < datetime(prevdttm.year, prevdttm.month, prevdttm.day, prevdttm.hour): for item in (itm for itm in self.contents if itm.dttm): item.dttm = datetime(item.dttm.year-1, item.dttm.month, item.dttm.day, item.dttm.hour, item.dttm.minute) elif datetime(thisyear, rmon, rday, rhr) > datetime(rundttm.year, rundttm.month, rundttm.day, rundttm.hour): thisyear -= 1 for item in (itm for itm in self.contents if itm.dttm): item.dttm = datetime(item.dttm.year-1, item.dttm.month, item.dttm.day, item.dttm.hour, item.dttm.minute) ldttm = datetime(thisyear, rmon, rday, rhr, rmin) ltext = rmat.group(5) if self.re_nickchange.match(ltext): ncmat = self.re_nickchange.match(ltext) lold, laddr, lnew = ncmat.group(1), ncmat.group(2), ncmat.group(3) self.contents.append(nickchange.NickChange(ldttm, lnew, lold, laddr)) elif self.re_quit.match(ltext): qmat = self.re_quit.match(ltext) lnick, laddr, lqmsg = qmat.group(1), qmat.group(2), qmat.group(3) self.contents.append(userquit.UserQuit(ldttm, lqmsg, lnick, laddr)) elif self.re_ownnick.match(ltext): onmat = self.re_ownnick.match(ltext) lnick = onmat.group(1) self.contents.append(nickchange.NickChange(ldttm, lnick)) else: self.contents.append(simpleline.SimpleLine(ldttm, ltext)) prevdttm = ldttm