CodeKata-Data Munging
2013-03-03 22:43 MichaelYin 阅读(349) 评论(0) 收藏 举报这次的CodeKata主要训练的是正则的使用,之前了解正则是在Asp.net的URL处理上,比如进行URL的重写需要进行正则的匹配,这次正好学习学习。
第一个问题是对天气数据的提取,取出温度分布最小的那一天,使用正则中的group就可以很方便的取出相应的数据
第二个问题是根据英超成绩找出净胜球最接近0的球队原理和上一个相同,考察的也是正则表达式中的group,后面的无关数据不需要匹配,所以只要能确保解析到我要的数据就OK了。
第三个问题是对前两个问题的代码进行分析,提取出共用的部分,进行重用。考察前两个问题的代码,发现文件读取,正则处理,都是很类似的逻辑,所以将这部分进行提取抽象成一个类,将正则,相关参数和文件路径抽象成类,这样的话代码维护性也比较好,废话不多说,上代码
import re
class Input():
def __init__(self, path, expression, key, firstindex, secindex):
self.path = path
self.expression = expression
self.key = key
self.firstindex = firstindex
self.secindex = secindex
class Recorder(object):
def __init__(self, input):
self.key = None
self.value = None
self.input = input
def add(self, key, first_value, sec_value):
value = abs(int(first_value) - int(sec_value))
if(self.key == None or value < self.value):
self.key = key
self.value = value
def process(self):
patten = re.compile(self.input.expression)
file = open(self.input.path, 'r')
for line in file.readlines():
match = patten.search(line)
if(match):
self.add(match.group(self.input.key), match.group(self.input.firstindex), match.group(self.input.secindex))
file.close()
print "find the key %s" % self.key
input = Input(r'D:\football.dat', \
r'\d\.\s(\w+)\s+(\d+\s+){4}(\d+)\s{2}-\s{2}(\d+)', \
1, \
3, \
4)
recorder = Recorder(input)
recorder.process()
处理不同的文件,使用不同的input传入进去就行了
另附正则学习资源
张子阳写的正则表达式的教程猛戳这里
Regex Match Tracer ,很好用的正则工具猛戳这里
浙公网安备 33010602011771号