2017-09-23 74 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運營商對它們進行比較。