使用python从文本文件获取所需数据,而无需使用拆分

时间:2018-07-10 02:48:57

标签: python file

你好,我有一个文件:

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(",")等),但这将是很长的代码,而且不明智。

有更短的方法吗?

2 个答案:

答案 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'