python中大型文件的快速解析

python中大型文件的快速解析,python,regex,parsing,Python,Regex,Parsing,我需要解析一个大文件(>1GB)。这些行的格式如下 2014-03-11-00.02.46.149069 TBegin(EventId=“XXXX”,RequestId=“Request”,SrvName=“service”,TxTime=“TransactionTime”) ... ... End_TxTime EntityId='XXXX'的新状态设置为'DONE'EventId='XXXX'RequestId=请求 我要做两次手术- 1) 解析特定服务和记录请求的文件并开始Transact

我需要解析一个大文件(>1GB)。这些行的格式如下

2014-03-11-00.02.46.149069 TBegin(EventId=“XXXX”,RequestId=“Request”,SrvName=“service”,TxTime=“TransactionTime”) ... ... End_TxTime EntityId='XXXX'的新状态设置为'DONE'EventId='XXXX'RequestId=请求

我要做两次手术- 1) 解析特定服务和记录请求的文件并开始TransactionTime 2) 根据RequestId和记录结束transactionTime再次解析文件

下面提供了我的代码

    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]
上面的代码工作正常,但解析1GB数据需要20分钟。 有什么方法可以让这更快吗。。?? 如果我能在一半的时间内得到这个结果,那将非常有帮助。。 忠告

re.search(r'.*RequestId="(.*)",SrvName="%s.*TxTime="(.*)"\)' % service,line,re.M)
在这里,如果服务不断变化,最好使用组
*
,然后在匹配后检查该组是否等于服务,这样Python就不必每次都编译一个新的正则表达式


使用
i+=1
而不是
i=i+1
(这可能是一个微优化,但无论如何它是更干净的代码)。

您可以添加完整的代码示例吗?您是否尝试编写用于文件读取的生成器?