2013-03-11 227 views
-1

我想遍历一个导入的.csv文件并将列中的每个值赋给变量。想法是使用该变量来搜索Shodan API,将搜索结果打印到屏幕上,然后转到列中下一行的值,将其分配给变量,执行搜索等操作上。迭代字典值,分配给变量

下面是我从我迄今发现拼凑起来....

import csv 

# Initialize the API 
from shodan import WebAPI 
api = WebAPI("My Shodan Key") 

# Open csv file 

with open('C:\pythonfiles\sccm.csv', 'rb') as reader: 
    sccmtable = csv.reader(reader, delimiter=';') 
    #for row in sccmtable: 
    #print ', '.join(row) 

for row in sccmtable: 
    for value in row: 
     edbresults = api.exploitdb.search(value) 
     print (edbresults) 

看来,如果这是正确的开始,因为我可以打印新导入的内容CSV到屏幕上,但我不知道如何采取下一步。任何帮助是极大的赞赏。

此致敬礼。

+0

您是否收到错误?它是什么?你想搜索每一行中的每个值,还是每行搜索所有的值? 'row'是一个值列表,我只是猜测'api.exploitdb.search'需要一个字符串,而不是一个字符串列表。 – shx2 2013-03-12 06:17:55

+0

@ shx2感谢您的回复。你是正确的,'api.exploitdb.search'需要一个字符串,我不知道'row'是一个值列表。我想单独搜索每一行中的每个值。谢谢你的帮助。 – user2145207 2013-03-12 13:47:28

回答

1

为了单独搜索每个行中的每个值,这样做:

for row in reader: 
    for value in row: 
     edbresults = api.exploitdb.search(value) 
     print (edbresults) 
+0

再次感谢!我插入你提供的内容,并且出现以下错误:''ValueError:关闭文件上的I/O操作'我的大脑现在正处于工作状态很长时间,所以我明天可以做更多的研究就我自己而言,这是什么原因造成的。有任何想法吗? – user2145207 2013-03-12 20:18:14

+0

我在Google-fu之后发现了这一点:“在这里注意类似文件的行为是很重要的,请注意,写入操作返回到开头并读取之后,需要执行seek。尝试两次运行相同的迭代器结果在第二次通过时没有值 '''StringIO.getvalue()''返回一个新创建的字符串对象,其中包含StringIO缓冲区的全部内容。“你认为这种方法会有帮助吗? – user2145207 2013-03-12 20:25:48

+0

请修正您的原始问题中的缩进,并包含您收到错误的完整追溯。这可以帮助您更轻松地找到解决方案。 – shx2 2013-03-12 20:35:09

0

关于你提到的第二个问题,当你with声明超出范围,你的文件被关闭。您仍然需要在范围内阅读其内容。简单地缩进。

with open('C:\pythonfiles\sccm.csv', 'rb') as reader: 
    sccmtable = csv.reader(reader, delimiter=';') 
    #for row in sccmtable: 
    #print ', '.join(row) 

    for row in sccmtable: 
     for value in row: 
      edbresults = api.exploitdb.search(value) 
      print (edbresults) 
+0

谢谢!它现在似乎在工作。我的CSV有375行,每行都包含一个应用程序的名称。当我运行脚本时,前四个将不返回结果。第五是一个好的命中,并返回良好的搜索结果,然后下两个没有结果。然后有东西爆炸。 – user2145207 2013-03-12 21:26:30

+0

Traceback(最近一次调用最后一次): 文件“build:”文件“build:文件”C:\ Users \ wilsond \ workspace \ Desktop Patching Lookup \ ModuleOne.py“,第22行,在 edbresults = api.exploitdb.search \ bdist.win32 \ egg \ shodan \ api.py“,第105行,搜索 文件”build \ bdist.win32 \ egg \ shodan \ api.py“,第159行,在_request中 文件”C:\ Python27 \ lib \ urllib2.py“,第126行,在urlopen 返回_opener。打开(url,data,timeout) 文件“C:\ Python27 \ lib \ urllib2.py”,第406行,打开 response = meth(req,response) – user2145207 2013-03-12 21:27:28

+0

文件“C:\ Python27 \ lib \ urllib2.py “,第519行,http_response 'http',请求,响应,代码,msg,hdrs) 文件”C:\ Python27 \ lib \ urllib2.py“,第444行,错误 返回self._call_chain(* args ) 在_call_chain中的文件“C:\ Python27 \ lib \ urllib2.py”,第378行 result = func(* args) http_error_default中的文件“C:\ Python27 \ lib \ urllib2.py”,第527行 引发HTTPError(req.get_full_url(),code,msg,hdrs,fp) urllib2.HTTPError:HTTP错误503:服务暂时不可用 – user2145207 2013-03-12 21:28:16