使用PYTHON读取文件和正则表达式

时间:2013-04-16 12:18:33

标签: python regex python-2.6

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

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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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']