如何构建python脚本来解析exim日志文件并生成发送域计数

如何构建python脚本来解析exim日志文件并生成发送域计数,python,dictionary,logfiles,exim,Python,Dictionary,Logfiles,Exim,我想构建一个python脚本,它通过smtp服务器上的exim日志文件进行greps处理,并报告每天、每周和每月大多数发送域的总数。 我对python非常陌生,我正在努力实现这一点 exim日志文件中的相关行通常如下所示: Feb 24 00:00:23 smtp1.mail.net exim[5660]: 2014-02-24 00:00:23 1Wuniq-mail-idSo-Fg -> someuser@somedomain.com R=mail T=remote_smtp H=sm

我想构建一个python脚本,它通过smtp服务器上的exim日志文件进行greps处理,并报告每天、每周和每月大多数发送域的总数。 我对python非常陌生,我正在努力实现这一点

exim日志文件中的相关行通常如下所示:

Feb 24 00:00:23 smtp1.mail.net exim[5660]: 2014-02-24 00:00:23 1Wuniq-mail-idSo-Fg -> someuser@somedomain.com R=mail T=remote_smtp H=smtp.mail.net [000.00.34.17]

Feb 24 00:00:23 smtp1.mail.net exim[5660]: 2014-02-24 00:00:23 1Wuniq-mail-idSo-Fg -> someuser@somedomain.com R=mail T=remote_smtp H=smtp.mail.net [000.00.34.17]

Feb 24 00:00:23 smtp1.mail.net exim[5661]: 2014-02-24 00:00:23 1Wuniq-mail-idSm-1h => someuser@somedomain.com R=mail T=pop_mail_net H=mta.mail.net [000.00.34.6]

Feb 24 00:00:23 smtp1.mail.net exim[5661]: 2014-02-24 00:00:23 1Wuniq-mail-idSm-1h Completed
sys
os
re
模块应足以实现这一点(?)。 我还想使用字典,因为我想每天在cron中运行脚本

主要的问题是:如何看我grep槽只相关线?Exim日志很多,我只想grep包含“=>和->”的行。与以“1W”开头的uniq maild ID一起使用。 此外,对于日常脚本运行,脚本必须通过日志文件“尾随”,并且应该从脚本上次执行时停止解析日志文件的最后位置开始。 为了生成可靠的每日发送域计数,这是必要的


非常感谢您的帮助。

您可以首先通过以下方式反向读取文件:

    logFileData = []
    with open( pathToLogFile, "r" ) as logfile:
            logFileData = reversed( logfile.readlines() )
然后,您可以从以下位置获取每个日志文件数据的部分:

    for line in logFileData:
            temp = ""
            if '=>' in line:
                    temp = line.split('=>')
            elif '->' in line:
                    temp = line.split('->')

            if temp:
                    ## Get the first substring after splitting at '->/=>'; 
                    ##   From that substring, get the last substring after splitting at all whitespaces.

                    address = temp[0].split()[-1].strip()
                    timestampParts = temp[0].split()[:3]  #Get each part of the date
                    timestampString = " ".join( timestampParts )

                    ##   Get the last two characters of interest from it.
                    if address.startswith("1W"):
                             pass  #Replace with your functionality here
有关字符串中的解析时间,请查看python包。另见相关问题

我假设这是一个脚本,这意味着你不能“记得”上次把它放在哪里了。为此,您可以在读取日志文件时编辑日志文件本身,并用一个唯一的符号标记您离开的位置。下次读取时,仅从文件末尾读取符号


编辑:更正了
时间戳
计算

这帮了大忙,这正是我需要的输出。谢谢