2013-04-16 2 views
0

저는 파이썬과 프로그래밍에서 초보자입니다. 나는 메시지가 보내 졌는지 아닌지 알 수있는 스크립트를 파이썬으로 작성하고 싶습니다. 로그 파일을 읽은 후 각 메시지에 중반이 있다는 것을 알았으므로 아이디어를 얻었지만 확실하지는 않습니다 ... 목록이나 사전에 모든 중반을 저장하면이 메시지를 비교할 수 있습니다 중반 +가있는 라인 \의 + "OK"또는 "오류"여기 내 로그 파일의 일부 (중앙 년대가 하나마다 증가하고 있습니다.) 것 누군가가 시작하는 나를 도울 수 있습니까? 내가 미리파일 및 정규식 읽기 PYTHON

에 어떻게 시작하는 .. 감사합니다
01:09:25.258 mta Messages  I Doc O:NVS:SMTP/[email protected] R:NVS:SMS.0/+01542xx **mid:6261** 
01:09:41.965 mta Messages  I Rep O:NVS:SMTP/[email protected] R:NVS:SMS.0/+01542xx **mid:6261** 
01:09:41.965 mta Messages  I Rep **6261** OK, Accepted (ID: 26) 
+0

당신이 내가 로그 파일이 – michaelmeyer

+0

를 원하는 것을 이해하는 것이 쉬운 일이 아닙니다, 당신의 질문을 명확히하십시오, 나는 그것을 SMS, 음성, 팩스 서버의 로그 파일을 내가 원하는 질문에 그것의 일부를 퍼트 메시지가 보내 졌는지 여부를 확인하는 스크립트를 작성하십시오. 여기에 오류가 없으면 "OK"가 표시됩니다. 14 : 12 : 43.068 mta 메시지 I Rep O : NVS : SMTP/[email protected] R : NVS : FAXG3/+ 01510 중반 : 6418 반복 6 14 : 12 : 43.068 mta 메시지 I 담당자 6418 오류 네트워크 –

+0

'** 1234 ** 오류와 같은 모든 행을 검색하는 것으로 충분하지 않습니까? 그 안에? 또는 메시지가 처음에 오류가있을 수 있고 재 시도 후 OK로 변경 될 수 있습니까? –

답변

0

을 아무 생각이 없기 때문에 나는 다음을 제안 :

가의 로그 파일이 메모리에 맞게 너무 큰 아니라고 가정 해 봅시다.

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

먼저, 파일에있는 모든 메시지 ID 찾기 : OK 라인을 사이

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

의 차이가 존재하는 지금

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

는 모든 메시지 ID를 찾을 수를 두 개는 OK 메시지가없는 ID 세트입니다.

failures = messages - successes 
+0

감사합니다. Tim =) –

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

답장을 보내 주셔서 감사합니다.하지만 두 줄 마지막 줄을 알려주십시오. 나는 그것을 얻지 못했다. –

+0

'd [res.group (1)] = res.group (2)'는 사전 키 (mid, 패턴 'pat'의 첫번째 일치 그룹을 값 (상태, 두 번째 match '패턴을'pat '패턴으로 사용하여 키가 사용자의 미디이고 값이 상태 인 사전을 만듭니다 – MichaelJCox

+0

'errors = [mid for mid, status =='d.items (status) ]'는 사전에있는 '오류'상태의 모든 중간 목록을 만드는 [list comprehension] (http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)입니다. – MichaelJCox