繁体   English   中英

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

[英]Reading files and regex with PYTHON

我是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)

我建议以下内容:

假设日志文件太大,无法容纳在内存中。

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

像这样吗

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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM