gpt4 book ai didi

python - 使用 python 正则表达式解析具有来自不同 block 的值的特定单词

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:27 25 4
gpt4 key购买 nike

我正在尝试使用 Python 正则表达式从 3GB 日志文件中提取数据作为元组。

日志的格式如下。

2012-11-22 08:57:25,232 [P:DEBUG] moteId=245 statusElem=1
2012-11-22 08:57:25,042 [P:DEBUG] parsed into Tuple_IsSync(isSync=1)
2012-11-22 08:57:26,128 [P:DEBUG] parsed into Tuple_ScheduleRow(row=9, slotOffset=9, type=6, shared=0, channelOffset=0, neighbor_type=0, neighbor_bodyH=0, neighbor_bodyL=0, backoffExponent=1, backoff=0, numRx=0, numTx=0, numTxACK=0, lastUsedAsn_4=0, lastUsedAsn_2_3=0, lastUsedAsn_0_1=0, next=7638)

我想要元组:

(2012-11-22, 08:57:25,042, moteId=245, statusElem=1, isSync=1, numRx=0, numTx=0, numTxACK=0,)

在一行中。

import re
import sys

files=open('/Users/s/Desktop/p.log','r')

match=re.findall(r'\w[\s*moteId\s(statusElem)(isSync)(numTxAck).*]+.\d+',files.read())
f=open('/Users/s/Desktop/w.txt','w')
f.writelines(match)
f.close()

我的代码没有完全提取我正在寻找的内容。有什么建议吗?

最佳答案

嗯,这不是正则表达式,只是标准序列方法和切片,但它有效,至少对于您提供的数据来说:

from StringIO import StringIO

data = '''
2012-11-22 08:57:25,232 [P:DEBUG] moteId=245 statusElem=1
2012-11-22 08:57:25,042 [P:DEBUG] parsed into Tuple_IsSync(isSync=1)
2012-11-22 08:57:26,128 [P:DEBUG] parsed into Tuple_ScheduleRow(row=9, slotOffset=9, type=6, shared=0, channelOffset=0, neighbor_type=0, neighbor_bodyH=0, neighbor_bodyL=0, backoffExponent=1, backoff=0, numRx=0, numTx=0, numTxACK=0, lastUsedAsn_4=0, lastUsedAsn_2_3=0, lastUsedAsn_0_1=0, next=7638)
'''

flo = StringIO(data)
mlst = []
for line in flo:
lst = line.split()

if 'moteId' in line:
mote, status = lst[3], lst[4]

elif 'isSync' in line:
dt, tm = lst[0], lst[1]
sync = lst[-1][-9:-1]

elif 'Tuple_ScheduleRow' in line:
numRx = lst[15].replace(',', '')
numTx = lst[16].replace(',', '')
numTxACK = lst[17].replace(',', '')
t = dt, tm, mote, status, sync, numRx, numTx, numTxACK
mlst.append(t)

我使用 StringIO 来模拟文件,您只需使用该文件即可。最后我将元组存储在主列表中。但如果您对这种大小的文件执行此操作,您可能会感到遗憾,具体取决于您的内存情况。最好对元组做任何您需要做的事情,然后让它被GC。如果您必须使用正则表达式,那么您仍然可以使用此逻辑并为每种线类型应用不同的正则表达式,替换我的切片等。

这当然没有优化,但希望它能给您一些想法并有一定用处。

迈克

关于python - 使用 python 正则表达式解析具有来自不同 block 的值的特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13516823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com