在python中使用CSV中的IP列表

时间:2012-11-25 12:21:17

标签: python csv ip

所以,我在CSV文件中列出了这个IP列表。只有一列,如果我捕获文件它们都出现在不同的行上,而file命令告诉我它是ASCII文本。

但是,当我尝试遍历文件并解析不同IP的广告时:我收到错误“socket.herror:[Errno 1] Unknown host”。

由于某种原因,单元格的值不正确是一个字符串,我无法将其转换为一个。

from string import rstrip
from socket import gethostbyaddr

csv_file = open('csv_list.csv', "r")

for line in csv_file:
    dns_name = gethostbyaddr(str(line.rstrip('\n')))
    print "IP: " + line.rstrip('\n') + "DNS Name:" + dns_name[0]

这有什么办法吗?我一直在考虑将文件转换为纯文本文件,到目前为止将文件中的所有值添加到列表中,但我不确定最佳解决方案是什么。

有人有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

您的问题不在于读取文件(这也可以使用with ...进行优化)但是无法反向查找一个IP。在这种情况下,gethostbyaddr函数会抛出异常。

我已经编写了一些示例,现在它报告的错误不是因为异常崩溃而是打印出一条消息。

from string import rstrip
from socket import gethostbyaddr

with open('csv_list.csv', 'r') as csv_file:
    for line in csv_file:
        ip = line.strip()
        try:
            dns_name = gethostbyaddr(ip)
            print "IP: %s, DNS Name: %s" % (ip, dns_name[0])
        except Exception, e:
            print "IP: %s, DNS lookup error: %s" % (ip, e)

例如,这个IP列表:

1.2.3.4
8.8.8.8
4.4.4.4
bad IP
1.2.3

打印

IP: 1.2.3.4, DNS lookup error: [Errno 1] Unknown host
IP: 8.8.8.8, DNS Name: google-public-dns-a.google.com
IP: 4.4.4.4, DNS lookup error: [Errno 1] Unknown host
IP: bad IP, DNS lookup error: [Errno 8] nodename nor servname provided, or not known
IP: 1.2.3, DNS lookup error: [Errno 1] Unknown host

答案 1 :(得分:1)

您还可以尝试使用numpy loadtxt从文件创建数组。

    from numpy import loadtxt
    ip_list = loadtxt("filename.csv", unpack=True)