2017-09-23 71 views
0

我要过滤一个.csv文件的某些行:如何过滤柱线在python

2017/06/07 10:42:35,THREAT,url,192.168.1.100,52.25.xxx.xxx,Rule-VWIRE-03,13423523,,web-browsing,80,tcp,block-url 
2017/06/07 10:43:35,THREAT,url,192.168.1.101,52.25.xxx.xxx,Rule-VWIRE-03,13423047,,web-browsing,80,tcp,allow 
2017/06/07 10:43:36,THREAT,end,192.168.1.102,52.25.xxx.xxx,Rule-VWIRE-03,13423047,,web-browsing,80,tcp,block-url 
2017/06/07 10:44:09,TRAFFIC,end,192.168.1.101,52.25.xxx.xxx,Rule-VWIRE-03,13423111,,web-browsing,80,tcp,allow 
2017/06/07 10:44:09,TRAFFIC,end,192.168.1.103,52.25.xxx.xxx,Rule-VWIRE-03,13423111,,web-browsing,80,tcp,block-url 

我要过滤包含IPS 192.168包含字符串“威胁”,在第二列线和行第四列中的.1.100和192.168.1.101。

这是我的执行至今:

import csv 

file= open(file.log, 'r') 
f= open(column, 'w') 
lines = file.readlines() 
for line in lines: 
     input = raw_input() 
     col = line.split(',') 
     if line.find(col[1])=="THREAT": 
       f.write (line) 
     if line.find(col[3]==192.168.1.100 && 192.168.101: 
       f.write (line) 
     else: 
       pass 

f.close() 
file.close() 

什么是错的代码?这是我期望得到的输出:

2017/06/07 10:42:35,THREAT,url,192.168.1.100,52.25.xxx.xxx,Rule-VWIRE-03,13423523,,web-browsing,80,tcp,block-url 
2017/06/07 10:43:35,THREAT,url,192.168.1.101,52.25.xxx.xxx,Rule-VWIRE-03,13423047,,web-browsing,80,tcp,allow 
+0

那究竟是什么问题? – Mureinik

+0

@Mureinik我运行的代码是错误的,我不知道哪里出错了。我想显示如下例所示的数据,但不能。谢谢你 –

+0

你知道,python列出了从零开始的索引吗? 'THREAT'不在'col [2]'中,它在'col [1]' –

回答

0

您使用str.find方法,如果发现-1,否则返回指数。在你的情况下 - 例如,如果THREAT符合要求 - 它将返回一些非零数字,但随后将该数字与字符串进行比较,显然返回False。 另外,你可以联合那些if声明。

因此,考虑到上面的 - 你if语句应该是:

if col[1] == "THREAT" or col[3] in ["192.168.1.100", "192.168.1.101"]: 
    f.write(line) 

另外 - 我不明白,你为什么在每次迭代使用raw_input永不再使用该值?

我建议你使用这个小优化代码:

import csv # not used in provide snippet, could be deleted 

file_log = open("file.log", 'r') # better to use absoulete path 
filtered_log = open("column", 'w') # same as previous 
for line in file: # no need to read entire file, just iterate over it line by line directly 
    col = line.split(',') 
    if col and (col[1] == "THREAT" or col[3] in ["192.168.1.100", "192.168.1. 101"]): 
     filtered_log.write(line) 

file_log.close() 
filtered_log.close() 
+0

我试过你的代码包,但是当我运行codenya时出错。 文件“spesificColom.py”,第9行,在 if col [1] ==“THREAT”或col [3]在[“192.168.1.100”,“192.168.1.101”]中: IndexError:列表索引超出范围 –

+0

固定额外支票 –

+0

我已经试过你的代码已被更改先生,但仍然是一个错误。我使用pyhton2.7 文件“spesificColom。py“第7行 如果在[”192.168.1.100“,”192.168.1.101“]中为col和(col [1] ==”THREAT“或col [3]]): IndexError:list index超出范围 –

0

Python的CSV模块提供了可用于一个.csv文件行遍历读者对象。

在每行中,您可以通过索引提取列,并在打印行之前应用一些比较逻辑。

此实现将文件过滤器需要:

import csv 

ip_list = ['192.168.1.100', '192.168.1.101'] 
with open('file.csv', 'r') as csvfile: 
    reader = csv.reader(csvfile) 
    for line in reader: 
     if (line[1]=="THREAT") and (line[3] in ip_list): 
      print(','.join(line)) 

正如你所看到的,这个实现存储在列表中的IPS使用python的in运营商对它们进行比较。