【发布时间】:2017-04-12 06:58:02
【问题描述】:
我试图查看字符串在第 4 列中出现了多少次。更具体地说,端口号在某些 Netflow 数据中出现了多少次。有数以千计的端口,所以除了递归之外,我没有寻找任何特定的东西。我已经使用冒号后面的数字解析到列中,我希望代码检查该数字出现了多少次,因此最终输出应该打印该数字以及它出现的次数......
[输出]
Port: 80 found: 3 times.
Port: 53 found: 2 times.
Port: 21 found: 1 times.
[代码]
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.")
[文件]
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
【问题讨论】:
-
好的。你有什么问题?
-
顺便说一句,你为什么用
file.read和for line in infile?这似乎在吠叫。 -
最后的输出循环应该是:
for port, count in d.items(): print("port:", port, "found:", count, "times.")- 如果你被困在 Python 2.7 上,请使用iteritems。 -
我的问题是代码如何计算字符串在列 [4] 中出现的次数,而无需实际指定字符串是什么它只是查找任何字符串的递归并给出计数字符串是什么。
-
@rogernm001 来计算需要某种形式的东西来比较它的出现。 (如果有道理的话)
标签: python recursion count counter frequency