将Sendmail日志文件加载到

2024-09-29 21:43:03 发布

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

我需要分析很多长的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)

第一列date server用空格隔开,但行的其余部分用“,”(逗号空格)隔开,字段数是可变的, 我的想法是按空格分隔列,然后在最后一个字段上搜索特定的文本,创建新列

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

一些想法


Tags: 文件comnonepandastlsrelaysendmailserver1
2条回答

一种方法如下:在命令行上使用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)"

然后可以使用csv将其拉入df,然后重命名列

最后,我在数据集中按行加载文件,并创建新的列来提取所需的特定字段,这比读取csv选项更容易

相关问题 更多 >

    热门问题