我正在使用下面的代码将文本文件(hosts.txt)读入列表,然后我尝试使用socket.gethostbyname()
将每个文件解析为其IPimport socket
non_blank_count = 0
with open('hosts.txt') as infp:
for line in infp:
non_blank_count += 1
print 'IPs to be resolved %d' % non_blank_count
with open('hosts.txt') as fp:
content = fp.readlines()
i=0
while i < non_blank_count:
print("Host: %s : IP: %s") % (content[i], socket.gethostbyname(content[i]))
i = i+1
每当我尝试这样做时,我都会收到以下错误消息:
回溯(最近一次调用最后一次):文件“test.py”,第18行,in print(“主机:%s:IP:%s”)%(content [i],socket.gethostbyname(content [i]))socket.gaierror:[Errno 11004] getaddrinfo失败
如果我使用以下内容尝试空闲,它可以正常工作:
>>> import socket
>>> socket.gethostbyname("google.com")
'74.125.237.99'
我认为它与双引号有关,但我不确定,我尝试了几种变体,它们都有相同的结果(包括用双引号括起主机)
我的hosts.txt文件格式如下
site.com
www.site.subsite.com
im.another.site.com
etc.com
任何建议都将不胜感激!
答案 0 :(得分:1)
您需要从每个地址中删除尾部'\ n'。请尝试以下方法:
content[i].rstrip('\n'), socket.gethostbyname(content[i].rstrip('\n'))
答案 1 :(得分:1)
file.readlines
返回字符串列表而不删除换行符。您必须使用str.strip
当您逐行处理文件时,请使用file作为迭代器,而不是使用file.readlines
:
import socket
with open('hosts.txt') as fp:
for line in fp:
host = line.strip()
print "Host: {} IP: {}".format(host, socket.gethostbyname(host))