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

2024-05-05 10:37:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用pyinotify监视irssi(irc client for linux command line)日志文件,irssi使用pyinotify中的inu MODIFY mask将此日志文件写入,它读取该文件很好,每次更改时都会被告知,但我正在尝试在一行中查找特定短语,在这行中短语是:

COMPLETE:

现在我有了检查最后一行的代码,看看它是否在那里,但是irssi有时会以块的形式写入日志文件,因为它是一个bot读出器,所以所有的东西都会同时出现。这段代码运行得很好,我遇到的问题是找到最接近底部的最后一行,其中包含完整的:短语。你知道吗

我知道我可能做错了,但我想到的方法(它不起作用,所以我做错了)是保存最后一个完整的:行并搜索该行和循环枚举在文件上与最后一行找到的行号的偏移量,然后处理每一个完整的行。下面是代码,如果有人有任何想法,或者也许有更好的方法,将不胜感激!你知道吗

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

编辑:

你知道吗自提取数据是一个函数,用于正则表达式输出我得到的行的某些部分,该行被发送到自提取数据从getlastline函数自我设定只是设置self.lastline公司打印是用来测试的。你知道吗

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

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

Tags: 文件selfforifdeflinethiscomplete