将Sendmail日志文件加载到pandas

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Sendmail日志文件加载到pandas相关的知识,希望对你有一定的参考价值。

我需要分析很多很长的Sendmail日志文件,其中一些是gzip,我正在尝试使用pandas,

这些行的格式如下:

    2019-02-04T17:41:06.957332-08:00 server1 sendmail[1945]: x151f6Ng001945: from=<xxxxxxxxx@domain1.com>, size=20946, class=0, nrcpts=1, msgid=<ZZZZZZZZZZZ>, proto=SMTP, daemon=MTA, tls_verify=NONE, auth=NONE, relay=server1 [127.0.0.1]
    2019-02-04T17:41:06.990091-08:00 server1 sendmail[1955]: x151f6Ng001945: to=<xxxxxxxxx@domain2.com>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, tls_verify=NONE, pri=140946, relay=server2. [IP_2], dsn=2.0.0, stat=Sent (Ok: queued as 43tnNL6jtyz6p3vf)

第一列,日期服务器用空格分隔,但行的其余部分用“,”(逗号空格)分隔,字段数是可变的,我的想法是按空格分隔列,并在最后一个字段后来搜索特定文本,以创建新列,

我尝试使用sep=r',(?!s)'不要使用逗号空格作为分隔符,但不起作用

一些想法

答案

一种方法如下:在命令行上使用sed将数据分成5列。

sed -e s/" "/", "/1 test.txt | sed -e s/" "/", "/2 | sed -e s/" "/", "/3 | sed -e s/" "/", "/4 | sed -e s/" "/"""/5 | sed -e s/$/"/ > test_5cols.csv

这会将逗号放在前4个空格中。第5列中的其他数据都是“混合”的,并且顺序不同。

2019-02-04T17:41:06.957332-08:00, server1, sendmail[1945]:, x151f6Ng001945:, from=<xxxxxxxxx@domain1.com>,"size=20946, class=0, nrcpts=1, msgid=<ZZZZZZZZZZZ>, proto=SMTP, daemon=MTA, tls_verify=NONE, auth=NONE, relay=server1 [127.0.0.1]"
2019-02-04T17:41:06.990091-08:00, server1, sendmail[1955]:, x151f6Ng001945:, to=<xxxxxxxxx@domain2.com>,"delay=00:00:00, xdelay=00:00:00, mailer=esmtp, tls_verify=NONE, pri=140946, relay=server2. [IP_2], dsn=2.0.0, stat=Sent (Ok: queued as 43tnNL6jtyz6p3vf)"

然后,您可以使用pandas read_csv将其拉入df,然后重命名列。

另一答案

最后,我在数据集中逐行加载文件并创建新列,提取我需要的特定字段,read_csv选项更容易

以上是关于将Sendmail日志文件加载到pandas的主要内容,如果未能解决你的问题,请参考以下文章

如何将 for 循环中的 .pkl 文件附加到 for 循环中创建的 pandas 数据帧?

如何将 CSV/TSV 文件从 Pig 加载/导出到 Pandas?

如何将csv数据加载到matplotlib?

如何将 json 加载到 pandas 数据框中?

将 CSV 加载到 Pandas MultiIndex DataFrame

将不同类型的 CSV 字符串加载到 Pandas 数据框中,拆分列,解析日期