所以,我在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]
这有什么办法吗?我一直在考虑将文件转换为纯文本文件,到目前为止将文件中的所有值添加到列表中,但我不确定最佳解决方案是什么。
有人有什么想法吗?
提前致谢!
答案 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)