我需要过滤.csv
文件的一些行:
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
我想过滤第二列中包含字符串“THREAT”的行,以及第四列中包含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
您使用
str.find
方法,如果找到该方法,则返回index,否则返回-1。在您的例子中—例如,如果THREAT
在第行—它将返回一些非零的数字,但是您将该数字与字符串进行比较,这显然是返回False
。 此外,还可以合并这些if
语句。你知道吗因此,考虑到上述情况,您的
if
语句应该是:另外-我不明白,为什么每次迭代都使用
raw_input
而不再使用那个值?你知道吗我建议你使用这个小优化代码:
Python的csv模块提供了一个reader对象,可用于迭代
.csv
文件行。你知道吗在每一行中,您可以根据列的索引提取列,并在打印行之前应用一些比较逻辑。你知道吗
此实现将根据需要筛选文件:
如您所见,这个实现将ip存储在一个列表中,以便使用python的
in
操作符进行比较。你知道吗相关问题 更多 >
编程相关推荐