Python使用短语COMPLETE搜索最后一行的irc日志文件:

时间:2014-10-31 15:54:50

标签: python file-io pyinotify

我正在使用pyinotify监视irssi(irc客户端的linux命令行)日志文件,而这个日志文件是由irssi使用pyinotify的IN_MODIFY掩码写的,它读取文件就好了,并被告知每次改变时,我都试图在一行中找到一个特定的短语,在这一行中这句话是:

COMPLETE:

现在我有代码检查最后一行以查看它是否存在,但是irssi有时会以块的形式写入日志文件,因为它是因为它是机器人读数而全部进入。这段代码工作正常,我遇到的问题是找到最接近底部的最后一行,其中包含COMPLETE:短语。

我知道我可能做错了但是我提出的方式(并且它不起作用,所以我做错了)是保存最后的COMPLETE:行并搜索该行并且for循环枚举文件,其中行号的偏移量在最后一行找到,并在此之后处理每个完整的行。下面是代码,如果有人有任何想法,或者更好的方法,我们将不胜感激!

def getlastline(self):
        logfile = "/home/user/irclogs/kta/#kta-all.log"
        with open(logfile, "rb") as f:
            if self.lastline != "":
                #This part doesn't work.
                thenum = 0
                for num, line in enumerate(f, 1):
                    if line == self.lastline:
                        thenum = num
                if thenum == 0:
                    return
                for i, ln in enumerate(f, thenum):
                    if ln.find("COMPLETE:") > 0:
                        self.setlast(ln)
                        self.extractdata(ln)
                return
            else:
                #This part here works
                first = f.readline()
                f.seek(-2, 2)
                while f.read(1) != "\n":
                    f.seek(-2, 1)
                last = f.readline()
                if last.find("COMPLETE:") > 0:
                    self.setlast(last)
                    self.extractdata(last)
                else:
                    #This part doesn't work
                    for line in reversed(f.readlines()):
                        if line.find("COMPLETE:") > 0:
                            self.setlast(line)
                            return

编辑:

self.extractdata是一个函数来重新排列我得到的行的某些部分,该行从getlastline函数发送到self.extractdata,而self.setlast只设置self.lastline和print的东西进行测试。

def __init__(self):
        self.lastline = ""

def setlast(self, line):
        self.lastline = line
        print "Next-Newest complete line found."

0 个答案:

没有答案