2017-07-27 17 views
0

私はpythonとstackoverflow自体に新しいです、それはここに私の最初の投稿です。複数のテキストパターンをフィルタリングし、それらとそのそれぞれの出現を格納する

2月1日午後12時00分02秒ブリッジカーネル:INBOUND TCP:IN = BR0 PHYSIN = eth0のOUT = BR0 PHYSOUT = eth1のSRC = XXX

私はこのようになりますログファイルで働いています。 XXX.XXX.XXX DST = XXX.XXX.XXX.XXX LEN = 40 TOS = 0x00 PREC = 0x00 TTL = 110 ID = 12973 PROTO = TCP SPT = 220 DPT = 6129 WINDOW = 16384 RES = 0x00 SYN URGP = 0

私はコロンの間のすべてを検索する必要があります。この行では、一致したパターンはINBOUND TCPですが、他のタイプのパターンもあります。

私はこのフィールドを検索して、すべてのユニークなタイプとファイルに何回出現したかを格納しなければなりません。

私はすでにファイルを開き、それを解析するためにre.compileを使用する方法を知っており、私は別のテキストファイルに一意の結果を保存することができました。

ドキュメントを読む私は、さまざまなパターンとその出現番号を保存するために、ある種のループで辞書を使用する必要があると思います。

誰かが私を助けることができますか?

これまでにお読みいただきありがとうございます。

#!/usr/bin/python3 
import sys 
import os 
import re 

p= re.compile ('bridge kernel:.*:') 
    with open (sys.argv[1], "r") as f: 
     with open ('tipos.txt',"w") as f2: 
      for line in f: 
       if p.search(line): 
        f2.write(line.split(":")[3] + '\n') 

os.system('sort tipos.txt|uniq > tipos2.txt') 
dict={} 
with open (sys.argv[1],"r") as log: 
with open ('tipos2.txt','r') as f: 
for l in f: 
if f in log: 
dict={"(f.line)", "(len(log))"} 
    print (dict) 
+0

ここではあなたの問題を必ず解決するつもりはありませんが、あなたのアプローチにお役立てください。その後、最適化について議論することができます。それは言われている、あなたのコードとあなたの試みとあなたが得る必要があるものとは何を取得しているか見ることができます。 – Fallenreaper

+0

Btw、 '00'もコロンの間です。どの正規表現を使用する予定ですか? – randomir

+0

私は現在現在家にいますが、私はこの時点で自分のコードにアクセスできません。明日私はここにそれを投稿することができます、私は私の投稿を編集し、それを含めるか、私はここにコメントに投稿すべきですか?ありがとうございました。 – inu86

答えて

0

それはすでにパイソン(The dict() constructor builds dictionaries directly from sequences of key-value pairs)内の既存のキーワードであるため、あなたの辞書dictを呼び出すべきではありませんまず第一に。彼らは引用符である -

この行dict={"(f.line)", "(len(log))"}が間違っている、このように使用中括弧は、あなたが実際にあなたがしたい変数2つの文字列を含む新しいsetを定義し、されていません意味します。

空の辞書自体の宣言は問題ありません。 既存の辞書に値を追加するには、dictName[key] = valueを使用します。値のペアを持つ辞書を宣言するには、dictName = {key1 : value1, key2 : value2}などを使用してください。

+0

チップをありがとうございます。できるだけ早く試してみるよ。 – inu86

+0

私はコードにいくつかの変更を加えて、別のステップに突っ込んだ。新しい質問を提出するか、これを編集する必要がありますか? ありがとうございます。 – inu86

関連する問題