你好,我有一个文件:
WORKERS = yovel:10.0.0.6,james:10.0.0.7
BLACKLIST = 92.122.197.45:ynet,95.1.2.2:twitter
我试图用python编写一个函数,该函数将获取工作程序IP并返回工作程序名称,如下所示:
workername = getName(ip)
我唯一要做的方法是使用splits(使用.split(":")
,.split(",")
等),但这将是很长的代码,而且不明智。
有更短的方法吗?
答案 0 :(得分:1)
您可以使用re
:
import re
def getName(ip, content = open('filename.txt').read()):
_r = re.findall('\w+(?=:{})'.format(ip), content)
return _r[0] if _r else None
print(getName('10.0.0.6'))
输出:
'yovel'
但是请注意,使用split
会更健壮:
def getName(ip):
lines = dict(i.strip('\n').split(' = ') for i in open('filename.txt')]
d = {b:a for a, b in map(lambda x:x.split(':'), lines['WORKERS'].split(','))}
return d.get(ip)
答案 1 :(得分:0)
在这里使用split()
看起来还不错:
def getName(ip_address, filename='file.txt', line_type='WORKERS'):
with open(filename) as in_file:
for line in in_file:
name, info = [x.strip() for x in line.strip().split('=')]
if name == line_type:
info = [x.split(':') for x in info.split(',')]
lookup = {ip: name for name, ip in info}
return lookup.get(ip_address)
其工作方式如下:
>>> getName('10.0.0.6')
'yovel'