我需要解析一个大文件(>;1GB)。行的格式如下。你知道吗
2014-03-11-00.02.46.149069 TBegin(EventId=“XXXX”,RequestId=“Request”,SrvName=“service”,TxTime=“TransactionTime”) ... ... End\u TxTime EntityId='XXXX'的新状态设置为'DONE'EventId='XXXX'RequestId=Request
我要做两个手术- 1) 解析特定服务和记录请求的文件并开始事务处理时间 2) 根据RequestId和记录结束事务时间再次解析文件
我的代码如下。你知道吗
requestId={}
request_arry=[]
start_time={}
end_time={}
f= open(sys.argv[2],"r")
for line in f:
searchObj1=re.search(r'.*RequestId="(.*)",SrvName="%s.*TxTime="(.*)"\)' % service,line,re.M)
if searchObj1:
if searchObj1.group(1) in requestId:
pass
else:
requestId[searchObj1.group(1)]=i
request_arry.append(searchObj1.group(1))
start_time[searchObj1.group(1)]=searchObj1.group(2)
i=i+1
searchObj2=re.search(r'.*new state set to(.*).*RequestId = \'(.{16}).*',line,re.M)
if searchObj2:
if searchObj2.group(2) in requestId:
end_time[searchObj2.group(2)]=line[:26]
上面的代码工作正常,但需要20分钟来解析1GB的数据。 有什么方法可以让这更快吗。。?? 如果我能在一半的时间内得到这个结果,那将非常有帮助。。 善意的建议
在这里,如果服务不断变化,最好使用一个组
.*
,然后在匹配之后检查该组是否等于服务,这样Python就不必每次都编译一个新的regex。你知道吗使用
i+=1
而不是i = i+1
(这可能是一个微优化,但无论如何它是更干净的代码)。你知道吗相关问题 更多 >
编程相关推荐