import reimport datetimelogline = '''183.60.212.153 - - [19/Feb/2013:10:23:29 +0800] \"GET /o2o/media.html?menu=3 HTTP/1.1" 200 16691 "-" \"Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)"'''pattern = '''(?P[\d\.]{7,}) - - \[(?P [^\[\]]+)\] "(?P [^"]+)" (?P \d+) (?P \d+) "([^"]+)" "(?P [^"]+)'''regex = re.compile(pattern)ops = { 'datetime':lambda timestr:datetime.datetime.strptime(timestr,'%d/%b/%Y:%H:%M:%S %z'), 'status': int, 'size': int, 'request':lambda request: dict(zip(('method', 'url', 'protocol'), request.split())) }d = {}#for k , v in extract(logline).items():#d[k] = ops[k].get(k, lambda x:x)(v)#{k:ops[k].get(k, lambda x:x)(v) for k , v in matcher.groupdict().items() }def extract(line): matcher = regex.match(line) info ={k:ops.get(k, lambda x:x)(v) for k , v in matcher.groupdict().items()} return info