工作中經常會遇到處理日誌檔案的問題:為了得到日誌的最新狀態,我們需要獲取日誌檔案的最後部分行來做判斷。那麼,這種情況下我們應該怎麼做呢?
1)常規方法:從前往後依次讀取
步驟:open開啟日誌檔案。
讀取檔案,獲取檔案的總行數。
遍歷所有行,提取指定行的資料。
優點:簡單,方便
缺點:當檔案大了以後時間太慢,無法忍受
2)推薦方法:
移動檔案讀取指標到檔案末尾。
從後往前移動指標直到合適的位置。
讀取檔案,提取指定行的資料。
優點:時間相對固定,適合處理大檔案
示例:
[python] view plain copy
logFile = open("logFilePath.log", "r")
logFile.seek(0,2)
logFile.seek(-1000000,2)
rowCount = 0
for row in logFile.readlines()[1:]:
pass
seek():移動檔案讀取指標到指定位置
tell():返回檔案讀取指標的位置
seek()的三種模式:
(1)f.seek(p,0) 移動當檔案第p個位元組處,絕對位置
(2)f.seek(p,1) 移動到相對於當前位置之後的p個位元組
(3)f.seek(p,2) 移動到相對文章尾之後的p個位元組
工作中經常會遇到處理日誌檔案的問題:為了得到日誌的最新狀態,我們需要獲取日誌檔案的最後部分行來做判斷。那麼,這種情況下我們應該怎麼做呢?
1)常規方法:從前往後依次讀取
步驟:open開啟日誌檔案。
讀取檔案,獲取檔案的總行數。
遍歷所有行,提取指定行的資料。
優點:簡單,方便
缺點:當檔案大了以後時間太慢,無法忍受
2)推薦方法:
步驟:open開啟日誌檔案。
移動檔案讀取指標到檔案末尾。
從後往前移動指標直到合適的位置。
讀取檔案,提取指定行的資料。
優點:時間相對固定,適合處理大檔案
示例:
[python] view plain copy
logFile = open("logFilePath.log", "r")
logFile.seek(0,2)
logFile.seek(-1000000,2)
rowCount = 0
for row in logFile.readlines()[1:]:
pass
seek():移動檔案讀取指標到指定位置
tell():返回檔案讀取指標的位置
seek()的三種模式:
(1)f.seek(p,0) 移動當檔案第p個位元組處,絕對位置
(2)f.seek(p,1) 移動到相對於當前位置之後的p個位元組
(3)f.seek(p,2) 移動到相對文章尾之後的p個位元組