您的位置:首页 > 其它

redhat 6.2下架设tuxedo应用服务器

2013-05-07 10:54 375 查看
在oschina里看到一个处理连续数的代码,觉得很赞,这种编码风格是我需要学习的,充分体现了py的精髓,呵呵
果断拉过来。
线上有个需求,格式化,从一堆s1,s100-s199中找出连续的服并且格式化显示出来,
如:
神魔:S106-109,s123,s125
御剑: s106-109,s123,s125

源文件:
神魔 S125
神魔 S123
神魔 S109
神魔 S108
神魔 S10
神魔 S12
神魔 S13
神魔 S14
神魔 S107
神魔 S106
御剑 S125
御剑 S123
御剑 S109
御剑 S108
御剑 S107
御剑 S106

得出结果:
神魔 S10,S12-14,S106-109,S123,S125,
御剑 S106-109,S123,S125,

实现过程如下:
import operator
import itertools
import sys
d={}
for line in open('/usr/local/src/2/file','r'):
_line=line.split()
#setdefault(k[,d])  如果K在字典中,返回对应的值,不在的话添加k键及对应的值
d.setdefault(_line[0], []).append(_line[1])

for key in d.keys():
#map 对list的每一个元素进行迭代操作
data=sorted(map(lambda x: int(x[1:]),d[key]))
sys.stdout.write(key + " ")
#for j,k in itertools.groupby(enumerate(data), lambda (i,x): i-x):
for j,k in itertools.groupby(enumerate(data), lambda (i,x): i-x):
#print j
#for subitems in k:
#print subitems
ret=map(operator.itemgetter(1),k)
if len(ret) > 1:
sys.stdout.write("S%d-%d," % (ret[0],ret[-1]))
#pass
elif len(ret) == 1:
sys.stdout.write(str("S%s") % ret[0]+ ",")
#pass
sys.stdout.write('\n')

#for j,k in d.items():
#  print j,k
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: