如何从文件中找到ipaddress并返回Python中的相应主机名

2024-05-19 14:00:28 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个名为aaa.txt的文件,其中的内容以以下格式存储:

# This is a comment
127.0.0.1     localhost
192.168.2.253     pyschools #pyschools server
100.0.0.4.9     amazon.com
.....

我需要编写一个Python函数,它接受字符串ip_address作为参数,并返回从文件中搜索它的相应主机名。在

如果在文件中找不到ip_address,它应该返回unknown host。在

这是我的解决方案。在

^{pr2}$

Example:

if ip_address = 127.0.0.1, it should return localhost.
if ip_address = 194.2.3, it should return unknown host.

但是,当我在pyschools.com网站[主题13:问题10],它说private test cases failed。在

我已经为这个问题辛苦工作了很长时间了,我不知道我遗漏了什么。 This is the link of that problem。您需要使用gmail登录才能访问它。如果有人完成了,请告诉我


Tags: 文件ipcomlocalhosthostreturnifis
3条回答

只需将它们放在dict中并使用^{},如下所示:

def gethostname(ip_address):
    with open("aaa.txt") as f:
        data = [i.strip() for i in f if i.strip() != '']

    return dict([i.split() for i in data if len(i.split()) == 2]).get(ip_address, "Unknown host")

演示:

^{pr2}$

输出:

^{3}$

为了通过测试,下面是来自here的另一个版本:

def gethostname_split(ip_address):
    fh = open('/tmp/hosts', 'r')
    columns = {}
    for line in fh.readlines():
        if not line.startswith('#'):
            tokens = line.split()
            if len(tokens) > 1:
                columns[tokens[0]] = tokens[1]

    print columns
    try:
        return columns[ip_address]
    except KeyError:
        return 'Unknown host'

这段代码不会失败,即使有一行有ip,没有主机名或空行。 伙计们,你们所有的脱衣舞都没用了,因为你们用的是split!在

def gethostname(ip_address):
    w = open("aaa.txt")
    for line in w:
        line = line.split()
        if line:
            ip = line[0]
            if ip_address == ip and len(line)>1:
                return line[1]
    return "Unknown host"

如果您需要一些建议,您可以只使用split一次,并且不带参数,因为它的默认参数是'\t\n'(最后还有更多的空白字符)。 并且else: continue在循环的末尾是无用的。最后,你的缩进似乎有些问题。在

def gethostname(ip_address):
  w = open("aaa.txt")
  for line in w:
    k = line.split(" ")
    for iIdx, val in enumerate(k):
       k[iIdx] = val.strip()

    if ip_address in k:
        return k[-1].strip()

  return "Unknown host"

相关问题 更多 >