如何在Python中将列表与实际字符串进行比较?

时间:2013-12-24 00:06:14

标签: python list hostname

我想用Python获取我的机器的hostname。我可以使用socket获取主机名。现在,我需要将此hostnamecolo列表进行比较,看看hostname是否属于哪个datacenter。它来自dc1或dc2或dc3。

#!/usr/bin/python

colo = ['dc1', 'dc2', 'dc3']

hostname = socket.gethostname()

如何检查该主机名是否来自哪个colo,然后将其打印出colo?

示例主机名将是这样的 -

dc1dbx1145.dc1.host.com
dc1dbx1146.dc1.host.com
dc1dbx1147.dc1.host.com
dc1dbx1148.dc1.host.com

3 个答案:

答案 0 :(得分:1)

.上拆分并测试第二个值:

location = hostname.split('.')[1]

演示:

>>> hostname = 'dc1dbx1145.dc1.host.com'
>>> hostname.split('.')[1]
'dc1'

您可能想要验证您找到的名称确实是一个公认的位置:

if location not in colo:
   print 'Not a recognized location'

如果您不知道该位置可能是哪个部分,请使用:

location = next((part for part in hostname.split('.') if part in colo), None)
if location is None:
    print 'Not a recognized location'

答案 1 :(得分:0)

如果您的主机名一致且始终采用此格式,您可以尝试以下内容:

data = hostname.split('.')
if len(data) == 4 and data[1] in colo:
     print "Datacenter: %s" % data[1]
else:
     print "Unknown hostname" 

如果您在获取主机名时遇到错误,if语句就是为了避免异常。

答案 2 :(得分:0)

您可以使用以下代码段:

colo = ['dc1', 'dc2', 'dc3']
hostname = socket.gethostname()
term= hostname.split('.')[1]
print filter(lambda x: term in x,colo)