2012-11-25 53 views
0

因此,我將這個IP列表存儲在一個CSV文件中。只有一列,如果我捕獲文件,它們全都出現在不同的行上,文件命令告訴我它是ASCII文本。在Python中使用CSV列表中的IP列表

但是,當我嘗試通過文件循環並解析不同IP的addesses時,出現錯誤「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

樣本輸入數據會很方便... –

+0

不需要'str()'這一行,它已經是一個字符串。嘗試使用'gethostbyaddr(line.strip())'(strip * all *空格,而不僅僅是換行符)。 –

回答

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 
+0

謝謝!從來沒有意識到這是真正的問題。非常感謝! – xeet

1

您也可以嘗試numpy的loadtxt從文件創建陣列。

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

謝謝,很高興知道=) – xeet