2017-07-27 55 views
0

我是新來的python和stackoverflow本身,這是我的第一篇文章。過濾多個文本模式並存儲它們以及它們各自的出現

2月1日00:00:02橋內核:外來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

順便說一下,'00'也在冒號之間。你計劃使用哪種正則表達式? – randomir

+0

我現在正在家,現在我無法訪問我的代碼。明天我將能夠在這裏發佈它,我是否應該編輯我的文章幷包括它或者我應該在評論中發佈它?謝謝。 – inu86

回答

0

首先,你不應該打電話給你的字典dict,因爲它已經在Python現有的關鍵字(The dict() constructor builds dictionaries directly from sequences of key-value pairs)。

此行dict={"(f.line)", "(len(log))"}不正確,像這樣使用大括號意味着你實際上是定義一個新的set包含兩個字符串,而不是你想要的變量 - 他們是在引號。

空字典本身的聲明很好。 要將值添加到現有字典,請使用dictName[key] = value。要聲明帶有值對的字典,請使用dictName = {key1 : value1, key2 : value2}等。

+0

感謝您的提示。我會盡快嘗試。 – inu86

+0

我對代碼進行了一些更改,並在另一個步驟中陷入困境。我應該提交一個新問題還是編輯這個問題? 謝謝。 – inu86

相關問題