【问题标题】:Use IP list in CSV in python在 python 中使用 CSV 中的 IP 列表
【发布时间】:2012-11-13 02:37:33
【问题描述】:

所以,我将这个 IP 列表保存在 CSV 文件中。只有一列,如果我对文件进行分类,它们都出现在不同的行上,并且文件命令告诉我它是 ASCII 文本。

但是,当我尝试遍历文件并解析不同 IP:s 的地址时,我收到错误“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]

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

有人有什么想法吗?

提前致谢!

【问题讨论】:

  • 样本输入数据会很方便...
  • 不用str()这一行,已经是字符串了。试试gethostbyaddr(line.strip())(去掉所有空格,而不仅仅是换行符)。

标签: python csv ip


【解决方案1】:

您的问题不在于文件的读取(也可以使用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

【讨论】:

  • 谢谢!从来没有意识到那是真正的问题。非常感谢!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2018-09-22
    • 2016-02-17
    • 1970-01-01
    • 2013-12-20
    • 2015-05-17
    相关资源
    最近更新 更多