簡體   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