0

我是 python 和一般编程的初学者,我想在 python 中创建一个脚本,可以判断消息是否已发送。阅读日志文件后,我注意到每条消息都有一个中间,所以我有一个想法,但我不确定......如果我将所有中间保存在列表或字典中,我将能够将它与行进行比较有 mid+ \s +“ OK ”或“ Error ” 这是我的日志文件的一部分(mid 每次都加一。)有人可以帮我开始吗?因为我不知道如何开始这个..提前谢谢

01:09:25.258 mta    Messages       I Doc O:NVS:SMTP/a.b@x.de R:NVS:SMS.0/+01542xx **mid:6261**
01:09:41.965 mta    Messages       I Rep O:NVS:SMTP/a.b@x.de R:NVS:SMS.0/+01542xx **mid:6261**
01:09:41.965 mta    Messages       I Rep **6261** OK, Accepted (ID: 26)
4

2 回答 2

0

像这样的东西?

import re

pat = r'\*\*(\d+)\*\* (OK|Error)'
text = open('emailex.txt').read()
d = {}
for res in re.finditer(pat, text):
    d[res.group(1)] = res.group(2)

errors = [mid for mid,status in d.items() if status == 'Error']
于 2013-04-16T13:18:28.767 回答
0

我建议如下:

让我们假设日志文件不是太大而无法放入内存。

import re
with open("myfile.log") as infile:
    data = infile.read()

首先,找到文件中的所有消息 ID:

messages = set(m.group(1) for m in re.finditer(r"\*\*mid:(\d+)\*\*", data))

现在,找到存在OK一行的所有消息 ID

successes = set(m.group(1) for m in re.finditer(r"\*\*(\d+)\*\*\s*OK", data)) 

两者的区别在于没有OK消息的 ID 集合:

failures = messages - successes
于 2013-04-16T13:15:11.263 回答