我是python和stackoverflow的新手,这是我在这里的第一篇文章。
我正在处理一个如下所示的日志文件:
2月1日00: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 :(得分:0)
首先,您不应该调用字典dict
,因为它已经是python中的现有关键字(The dict() constructor builds dictionaries directly from sequences of key-value pairs
)。
此行dict={"(f.line)", "(len(log))"}
不正确,这样使用的花括号意味着您实际上定义的是包含两个字符串的 new set
,而不是您想要的变量 - 它们在引号中。
空字典本身的声明很好。
要将值添加到现有字典,请使用dictName[key] = value
。要声明具有值对的字典,请使用dictName = {key1 : value1, key2 : value2}
等。