我有一個包含數十萬行的日誌文件。循環python中的循環
我正在通過這些行循環查找具有某些特定文本的任何行,例如:!!event!!
。
然後,一旦找到!!event!!
行,我需要繼續循環此行!!event!!
,直到找到接下來的3行包含自己的特定文本('flag1', 'flag2', and 'flag3')
。
一旦我找到第三行('flag3')
,然後我想繼續循環下一行!!event!!
行並重復前一個過程,直到沒有更多事件。
有沒有人有建議我構建我的代碼來完成這個?
例如:
f = open('samplefile.log','r')
for line in f:
if '!!event!!' in line:
L0 = line
#then get the lines after L0 containing: 'flag1', 'flag2', and 'flag3'
# below is a sample log file
#I am not sure how to accomplish this
#(I am thinking a loop within the current loop)
#I know the following is incorrect, but the
intended result would be able to yield something like this:
if "flag1" in line:
L1 = line.split()
if "flag2" in line:
L2 = line.split()
if "flag3" in line:
L3 = line.split()
print 'Event and flag times: ', L0[0], L1[0], L2[0], L3[0]
samplefile.log
8:41:05 asdfa 32423
8:41:06 dasd 23423
8:41:07 dfsd 342342
8:41:08 !!event!! 23423
8:41:09 asdfs 2342
8:41:10 asdfas flag1
8:41:11 asda 42342
8:41:12 sdfs flag2
8:41:13 sdafsd 2342
8:41:14 asda 3443
8:41:15 sdfs 2323
8:41:16 sdafsd flag3
8:41:17 asda 2342
8:41:18 sdfs 3443
8:41:19 sdafsd 2342
8:41:20 asda 3443
8:41:21 sdfs 4544
8:41:22 !!event!! 5645
8:41:23 sdfs flag1
8:41:24 sadfs flag2
8:41:25 dsadf 32423
8:41:26 sdfa 23423
8:41:27 sdfsa flag3
8:41:28 sadfa 23423
8:41:29 sdfas 2342
8:41:30 dfsdf 2342
從這個示例代碼應打印:
Event and flag times: 8:41:08 8:41:10 8:41:12 8:41:16
Event and flag times: 8:41:22 8:41:23 8:41:24 8:41:27
建議:將行饋送到狀態類似於find_event,find_flag1等的FSM(有限狀態機)。 – Ber 2013-03-14 15:28:43
您應該使用正則表達式來執行此操作。如果你向我展示一些示例輸入以及你想要做什麼,我可以教你如何。 – 2013-03-14 15:32:22