日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

借助二分法匹配时间戳实现快速查找日志内容

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 借助二分法匹配时间戳实现快速查找日志内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  借助二分法能夠快速匹配時間戳,根據時間戳來找出需要查找的日志內容。

  查找前提條件:

    1 因為是二分法特性,所以日志的時間必須是按從小到大或者從大到小的順序排列。

    2 根據查找需要,修改匹配時間戳。

    3 根據不同的時間戳格式,修改對應的代碼。

1 import os 2 import time 3 import sys 4 5 class SearchLog(object): 6 7 def __init__(self, file_name='./log.txt'):       8 self.fp = open(file_name)              9 self.fp.seek(0, os.SEEK_END)      #把指針移動到結尾 10 self.size = self.fp.tell()       #tell()方法能夠告訴我們文件的大小 11 self.fp.seek(0, os.SEEK_SET)      #吧指針移動到文件內容的開頭 12 13 def Search_cmp(self, timestamp, line):      #定義一個匹配時間戳的方法 14 tmp = line.split(' ')           15 riqi=tmp[0] 16 shijian=tmp[1] 17 realtime=riqi+' '+shijian #在這里可以修改要匹配的時間戳格式 18 #print realtime 19 return cmp(timestamp, realtime)          #cmp函數用于比較二者是否相同,如果返回為-1,那么就說明timestamp>realtime,如果等于0,那么兩者相等。 20 21 22 def Search_LineHead(self):              #定義一個匹配每行開頭的方法 23 24 while self.fp.tell() > 0:              25 self.fp.seek(-1, os.SEEK_CUR)        #把文件內容的指針在當前位置往前挪一位 26 val = self.fp.read(1)             # 讀取該指針位置的內容 27 if val == '\n':                 #匹配該指針內容的值是否等于換行符,等于就跳出循環 28 break   29 self.fp.seek(-1, os.SEEK_CUR)        #不等于就就繼續往前挪一位查找 30 31 def Search_TimeStamp(self, timestamp, start_p = 0): 32 33 fp_start = start_p 34 fp_end = self.size 35 36 while fp_start < fp_end:              #判斷指針開始位置是否小于結束位置 37 mid = fp_start + (fp_end-fp_start)/2     #找出中間值(利用二分法) 38 self.fp.seek(mid, os.SEEK_SET)        #通過seek定位到中間值 39 self.Search_LineHead()             40 line = self.fp.readline() 41 val = self.Search_cmp(timestamp, line)      #調用該方法能夠匹配時間戳,返回值為0那么就說明找到了時間戳 42 if val == 0:           43 print "find timestamp:%s" % line 44 return True 45 elif val == 1: 46 fp_start = self.fp.tell()          #如果等于1,說明當前內容的時間戳比輸入的時間戳大 47 else: 48 fp_end = mid                  #如果等于其他的,說明當前內容的時間戳比輸入的時間戳小, 49 return False 50 51 def Search_FirstStamp(self, timestamp, start_p = 0): 52 53 first_point = -1 54 val = self.Search_TimeStamp(timestamp, start_p) 55 56 if val == True: 57 point = self.fp.tell()                #這里的邏輯是這樣的==> 58 while point > 0:                    #如果search_timestamp這個方法匹配到了時間戳,并且指針恒大于0的話,指針就在當前位置往前挪,直到匹配到換行符,再把這行通過readlie()方法整行獨取出來。 59 self.fp.seek(-1, os.SEEK_CUR)          #此時再去匹配每行的開頭是否等于時間戳,如果等于的話,那么就把指針從文件內容開頭移動到匹配到時間戳的這行,標記這行為要查找的時間戳出現的第一行。 60 self.Search_LineHead()                   61 point = self.fp.tell()                       62 line = self.fp.readline() 63 print line 64 if line.startswith(timestamp) == True: 65 self.fp.seek(point, os.SEEK_SET) 66 continue 67 first_point = self.fp.tell() 68 break 69 70 return first_point 71 72 def Search_EndStamp(self, timestamp, start_p = 0): 73 74 last_point = -1 75 val = self.Search_TimeStamp(timestamp, start_p) 76 if val == True:                        #道理同上,不過這個的就反轉過來,用來查找要查找的時間戳的最后一行。 77 last_point = self.fp.tell() 78 while last_point < self.size: 79 line = self.fp.readline() 80 if line.startswith(timestamp) == True: 81 last_point = self.fp.tell() 82 continue 83 print line 84 self.fp.seek(last_point, os.SEEK_SET) 85 break 86 87 return last_point 88 89 def Search_Dump(self, s_p, e_p):                  #把查找到的內容寫入日志 90 self.fp.seek(s_p, os.SEEK_SET) 91 f_log=open('search_err.log','wb') 92 while self.fp.tell() < e_p: 93 print self.fp.readline() 94 f_log.write(self.fp.readline()) 95 f_log.close() 96 97 def Search_DeInit(self): 98 self.fp.close() 99 100 if __name__ == '__main__': 101 time_s = time.time() 102 obj = SearchLog(sys.argv[3]) 103 s_point = obj.Search_FirstStamp(sys.argv[1]) 104 if s_point > -1: 105 e_point = obj.Search_EndStamp(sys.argv[2], s_point) 106 if s_point > -1: 107 print s_point , e_point 108 obj.Search_Dump(s_point, e_point) 109 else: 110 print "not find" 111 print time_s, time.time() 112 113 obj.Search_DeInit()

?

總結

以上是生活随笔為你收集整理的借助二分法匹配时间戳实现快速查找日志内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 噜噜在线视频 | 秋霞欧美一区二区三区视频免费 | 亚洲最大福利网 | 久久午夜精品视频 | 713电影免费播放国语 | 青春草在线视频观看 | 偷拍视频一区二区 | 日本性猛交| 青青草在线免费 | 色欧美在线| 性生交大片免费看狂欲 | 天天爽天天爽天天爽 | 91精品国产亚洲 | 亚洲卡一 | 天天撸夜夜操 | 高清日韩| 91看片免费看 | 总裁边开会边做小娇妻h | 国产123区| 国产精品久久久久无码av色戒 | 邻居交换做爰2 | 亚洲一品道| 黄色大片91 | 一区二区三区欧美日韩 | 久久综合区 | 黄色片在线观看视频 | 奇米影视播放器 | 丁香婷婷深情五月亚洲 | 91蜜桃婷婷狠狠久久综合9色 | 这里有精品视频 | 麻豆亚洲av成人无码久久精品 | 婷婷色网 | 91视频毛片 | 欧美日韩不卡在线 | 亚洲av无码成人精品区 | 怡红院综合网 | 国产剧情在线一区 | 国产中文字幕在线播放 | 不卡一区二区在线 | 欧洲av网站 | 欧美精品激情 | 91精品福利| 中文字幕一区二区三区日韩精品 | 亚洲色图日韩 | 国产在线精品视频 | 伊人网在线视频 | 亚洲国产电影在线观看 | 在线综合视频 | 欧美亚洲天堂 | 国产成人无码精品久久久久 | 午夜精品久久久久久久99热黄桃 | 激情一级片 | 看免费毛片 | 男女黄色网 | 青青草久久爱 | 日日骑| 97人人艹| 波多野结衣久久精品 | 国产成人麻豆精品午夜在线 | 亚洲国产视频网站 | 丰满少妇被猛烈进入一区二区 | 伊人影院综合 | 欧美成人自拍 | 中文字幕不卡在线播放 | 亚洲天堂免费观看 | 欧美三级自拍 | 黄色在线观看国产 | 国产成人精品无码免费看在线 | 国产欧美亚洲精品 | 四虎成人在线视频 | 国产一区二区在线免费观看 | 国产免费自拍 | 在线观看国产黄色 | 日本久久久久久久久 | 免费大黄网站 | 色资源在线观看 | 国产美女流白浆 | 葵司av电影 | 久久中文字幕在线 | 激情福利视频 | 亚洲中文字幕无码不卡电影 | 亚洲综合成人在线 | 亚洲精品久久久久久久久久久久久 | 久久资源av | 婷婷色婷婷开心五月四房播播 | 一本色道久久综合亚洲 | 日本猛少妇色xxxxx猛叫 | hs在线观看 | 香蕉久久av| 91看大片| 天码人妻一区二区三区在线看 | 国产三级久久久久 | 久久久久99精品成人片直播 | 欧美三级韩国三级日本三斤 | 一级片视频在线观看 | 亚洲美女综合网 | 天天艹天天爽 | 亚洲自拍偷拍一区二区 | 婷婷五月在线视频 |