2017-04-12 125 views
0

我想查看第4列中出現了多少次字符串。更具體地說,某些Netflow數據中出現了多少次端口號。有成千上萬的端口,所以我沒有尋找任何特定的遞歸。我已經使用冒號後面的數字解析了列,並且我希望代碼檢查該數字發生了多少次,因此最終輸出應該使用它發生的次數來打印數字。計算某個字符串在特定列中出現的次數

[OUTPUT ]

Port: 80 found: 3 times. 
Port: 53 found: 2 times. 
Port: 21 found: 1 times. 

[CODE]

import re 


frequency = {} 

file = open('/Users/rojeliomaestas/Desktop/nettest2.txt', 'r') 

with open('/Users/rojeliomaestas/Desktop/nettest2.txt', 'r') as infile:  
    next(infile) 
    for line in infile: 
     data = line.split()[4].split(":")[1] 
     text_string = file.read().lower() 
     match_pattern = re.findall(data, text_string) 


for word in match_pattern: 
    count = frequency.get(word,0) 
    frequency[word] = count + 1 

frequency_list = frequency.keys() 

for words in frequency_list: 
    print ("port:", words,"found:", frequency[words], "times.") 

[FILE]

Date first seen   Duration Proto  Src IP Addr:Port   Dst IP Addr:Port Packets Bytes Flows 
2017-04-02 12:07:32.079  9.298 UDP   8.8.8.8:80 ->  205.166.231.250:8080  1  345  1 
2017-04-02 12:08:32.079  9.298 TCP   8.8.8.8:53 ->  205.166.231.250:80  1  75  1 
2017-04-02 12:08:32.079  9.298 TCP   8.8.8.8:80 ->  205.166.231.250:69  1  875  1 
2017-04-02 12:08:32.079  9.298 TCP   8.8.8.8:53 ->  205.166.231.250:443  1  275  1 
2017-04-02 12:08:32.079  9.298 UDP   8.8.8.8:80 ->  205.166.231.250:23  1  842  1 
2017-04-02 12:08:32.079  9.298 TCP   8.8.8.8:21 ->  205.166.231.250:25  1  146  1 
+1

OK。你的問題是什麼? –

+0

順便說一句,你爲什麼用'file.read' *和*'作爲infile中的行?這似乎在吠叫。 –

+0

另外最後的輸出循環應該是:'對於端口,在d.items()中計數:print(「port:」,port,「found:」,count,「times。」)' - 如果你使用'iteritems'都停留在Python 2.7上。 –

回答

0

你需要的東西,如:

frequency = {} 
with open('/Users/rojeliomaestas/Desktop/nettest2.txt', 'r') as infile:  
    next(infile) 
    for line in infile: 
     port = line.split()[4].split(":")[1] 
     frequency[port] = frequency.get(port,0) + 1 

for port, count in frequency.items(): 
    print("port:", port, "found:", count, "times.") 

的這個心臟是您保留端口的字典來算,並增加這對於每一行。 dict.get將返回當前值或默認值(在本例中爲0)。 OK。

+0

它的工作,謝謝! – k5man001

+0

我如何從最多到最不重要的排序呢? – k5man001

+0

這是一個單獨的問題 - 幾乎肯定是重複的 –

0

來自python標準庫。將返回一個正是你正在尋找什麼字典。

from collections import Counter 
counts = Counter(column) 
counts.most_common(n) # will return the most common values for specified number (n) 
+1

一些更多的解釋在這裏會很有用。目前我看不出這是如何回答這個問題的(這也不是一個真正的問題)。 – SiHa

+0

哦,我的天哪我的問題是,代碼如何計算一個字符串在列[4]中發生的次數,而不必指定字符串是什麼,它只是查找任何字符串的遞歸併給出一個計數。 – k5man001

+0

它應該比較1行到文件中的所有其他行,並繼續這樣做,直到每一行進行比較和計數,如果這是有道理的? – k5man001

相關問題