2017-07-27 52 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

相关问题