【问题标题】:Reading files and regex with PYTHON使用 PYTHON 读取文件和正则表达式
【发布时间】:2013-04-08 20:22:27
【问题描述】:

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

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)

【问题讨论】:

  • 请澄清你的问题,你想要什么并不容易理解
  • 我有日志文件,我把它的一部分放在问题中,它是 SMS、VOICE、FAX 服务器的日志文件,我想创建一个脚本来查看是否发送了消息如果已发送,则为“OK”,否则为错误,如下所示:14:12:43.068 mta Messages I Rep O:NVS:SMTP/lit@x.de R:NVS:FAXG3/+01510 mid:6418 重复 6 14 :12:43.068 mta 消息 I Rep 6418 错误网络
  • 查找所有包含**1234** Error 之类的行还不够吗?或者消息是否可以先出现错误,然后(重试后)变为 OK?
  • 是的,可以重试,稍后改成OK
  • 好的,我猜你只想找到那些最终不正常的,对吧?

标签: python regex python-2.6


【解决方案1】:

我建议如下:

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

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

【讨论】:

  • 谢谢你的回答 Tim =)
【解决方案2】:

这样的?

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

【讨论】:

  • 谢谢你的回答,但你能告诉我最后两行代表什么吗?我没听懂
  • d[res.group(1)] = res.group(2) 分配一个字典键(mid,模式'pat'中的第一个匹配组到一个值(状态,模式'pat'中的第二个匹配组。所以它构建一个字典其中键是您的中音,值是状态。
  • errors = [mid for mid,status in d.items() if status == 'Error'] 是一个list comprehension,它从字典中构建一个状态为“错误”的所有中音列表
  • 另外,我推荐@Tim Pietzcker 使用 with 语句打开输入文件的方法。在处理外部资源时,这通常是一种更好的做法。
  • 好的,我会尽力做到的,谢谢你的回答,我希望我会成功!
猜你喜欢
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 2017-01-20
相关资源
最近更新 更多