线上有个需求,格式化,从一堆s1,s100-s199中找出连续的服并且格式化显示出来,如:神魔:s106-109,s123,s125御剑: s106-109,s123,s125
代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*- # 2014/01/15 14:15import sysfrom itertools import *from operator import itemgetterdef parse(filename): d = {} for line in open(filename, ‘r’): _line = line.split() d.setdefault(_line[0], []).append(_line[1]) for key in d.keys(): data = sorted(map(lambda x: int(x[1:]), d[key])) sys.stdout.write(key + ” “) for k, g in groupby(enumerate(data), lambda (i, x): i – x): ret = map(itemgetter(1), g) if len(ret) > 1: sys.stdout.write(“s%d-%d,” % (ret[0], ret[-1])) elif len(ret) == 1: sys.stdout.write(str(“s%s”) % ret[0] + “,”) sys.stdout.write(‘\n’)if __name__ == “__main__”: filename = sys.argv[1] parse(filename)