2017-11-16 8 views
0

今日の日付、定数単語、単語の後の最初の数字など、特定の文字列を持つすべての項目に一致するログファイルを読み込むスクリプトを作成しようとしています。私はPythonにはかなり新しく、いくつかの問題があります。各正規表現一致 ための1つの変数を有することなく、正規表現を使用して、異なるグループと一致する方法regexで正規表現を使用してメールを一致させてメールを送信する

  1. (VAR1 = date + word + 7 -somehting、VAR2 = date + word + 9 -somethingを、など)
  2. など、他の言葉で接尾グループによってマッチを印刷する方法

グループ1

Geneva:

2017-11-14: Word: 7712742 (1346134)

グループ2

Helsinki:

2017-11-02: Word: 9124741 (912478)

私は、電子メールにこれらの一致とそのサフィックスのすべてを書きたいと思います。私はこれに取り組むことを試みた 現在の方法は次のとおりです。

import time 
import re 
import glob 

logpath = glob.glob('C:\\path\\to\\file*.log')[0] 
readfile = open(logpath, "r") 
daysdate = time.strftime("%Y-%m-%d") 
regex = re.compile(daysdate + ".*[Word:] \d.+") 
for line in readfile: 
    req_id = regex.findall(line) 
    for word in req_id: 
     #this print shows all regex matches from the log file 
     print(req_id,) 
... 
    mail.Body += "%s\n" % word 
    mail.Send() 

は今、これは今日の日付のすべて試合を出力し、目的のユーザー(複数可)にメールを送信しますが、私は見つけることがまだいます上記のようにして、いくつかのファイルを作成して書き込むのではなく、いくつかのファイルから読み込みます。これは非常に非Pythonの方法(と全体的なスクリプトの悪い練習)のように感じる。

は1は、このような日がdate + word + 7 -something、print("Geneva:\n", req_id7)で各試合のために、この使用していくつかのループ、取り掛かるたいだろうか、これを解決するために、他の、より良い方法はありますか?そのような例の出力は得られます。

Geneva: ['2017-11-15 04.03.18: Word: 78271187 (783342)'] 
Geneva: ['2017-11-15 04.03.19: Word: 75612345 (755491)'] 
Geneva: ['2017-11-15 04.03.22: Word: 70145678 (798640)'] 
Iが出力になりたい

Geneva: 
['2017-11-15 04.03.18: Word: 78271187 (783342)'] 
['2017-11-15 04.03.19: Word: 75612345 (755491)'] 
['2017-11-15 04.03.22: Word: 70145678 (798640)'] 

答えて

0

私はこの問題に見つかった溶液は、次に一致がそれぞれのアレイ、すなわちに付加された各正規表現を介してループ配列を作成することであったと

mail.Body = "Helsinki:\n%s\n" % ",\n".join(map(str,hel)) + \ 
"Geneva:\n%s\n" % ",\n".join(map(str,gen)) 
:のようなそれらの一致に続く各領域を書き出すために参加使用次いで

geneva = [] 
    helsinki = [] 

    for line in readfile: 
     for match in re.finditer(daysdate + r'.*Word: (7.{7}|9.{7})', line): 
      gen.append(match.group(1)) 

     for match in re.finditer(daysdate + r'.*Word: (5.{7}|6.{7})', line): 
      hel.append(match.group(1)) 

0

私が間違っているかもしれないが、これは問題をハックする一つの方法が考えられます。

import datetime 
date = datetime.datetime.now().strftime('%Y-%m-%d') 

regex = re.compile(date + r': Word: (7*.|9.*)') 

通常の検索コマンドを実行します。

0

あなたが試みることができる:

print(req_id.replace("Geneva: ",""),) 
関連する問題