python中大文件的快速解析

2024-04-20 02:55:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要解析一个大文件(>;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的数据。 有什么方法可以让这更快吗。。?? 如果我能在一半的时间内得到这个结果,那将非常有帮助。。 善意的建议


Tags: 文件inreiftimeline时间group
1条回答
网友
1楼 · 发布于 2024-04-20 02:55:50
re.search(r'.*RequestId="(.*)",SrvName="%s.*TxTime="(.*)"\)' % service,line,re.M)

在这里,如果服务不断变化,最好使用一个组.*,然后在匹配之后检查该组是否等于服务,这样Python就不必每次都编译一个新的regex。你知道吗

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

相关问题 更多 >