# coding=utf-8
import sys
import time
class tail():
def __init__(self,file_name,callback=sys.stdout.write):
self.file_name = file_name
self.callback = callback
def follow(self,n=10):
try:
# 開啟檔案
程式設計客棧with open(self.file_name) aexmwqs f:
self._file = f
self._file.seek(0,2)
# 儲存檔案的字元長度
self.file_length = self._file.tell()
# 列印最後10行
self.showlastline(n)
# 持續讀檔案 列印增量
while true:
line = self._file.readline()
if line:
self.callback(line)
time.sleep(1)
except exception,e:
print '開啟檔案失敗,囧,看看檔案是不是不存在,或者許可權有問題'
print e
def showlastline(self, n):
# 一行大概100個吧 這個數改成1或者1000都行
len_line = 100
# n預設是10,也可以foll程式設計客棧ow的引數傳進來
read_len = len_line*n
# 用last_lines儲存最後要處理的內容
while true:
# 如果要讀取的1000個字元,大於之前儲存的檔案長度
# 讀完檔案,直接break
if read_len>self.file_length:
self._file.seek(0)
last_lines = self._file.read().split('\n')[-n:]
break
# 先讀1000個 然後判斷1000個字元裡換行符的數量
self._file.seek(-read_len, 2)
last_words = self._file.read(read_len)
# count是換行符的數量
count = last_words.count('\n')
if count>=n:
# 換行符數量大於10 很好處理,直接讀取
last_lines = last_words.split('\n')[-n:]
break
# 換行符不夠10個
else:
# break
#不夠十行
# 如果乙個換行符也沒有,那麼我們就認為一行大概是100個
if count==0:
len_perline = read_len
# 如果有4個換行符,我們認為每行大概有250個字元
else:
len_perline = read_len/count
# 要exmwq讀取的長度變為2500,繼續重新判斷
read_len = len_perline * n
for line in last_lines:
self.callback(line+'\n')
if __name__ == '__main__':
py_tail = tail('test.txt')
py_tail.follow(20)
本文標題: python處理大日誌檔案
本文位址: /jiaoben/python/266557.html
python日誌 python日誌處理
一 日誌概念 日誌是一種可以追蹤某些軟體執行時所發生事件的方法。軟體開發人員可以向他們的 中 呼叫日誌記錄相關的方法來表明發生了某些事情。乙個事件可以用乙個可包含可選變數資料 的訊息來描述。此外,事件也有重要性的概念,這個重要性也可以被稱為嚴重性級別 level python自身也提供了乙個用於記錄...
處理日誌檔案
處理日誌檔案 lst 用來裝日誌 f open 2019 8 mode r encoding utf 8 讀取檔案 first f.readline strip split 檔案的第一行是屬性,轉化成列表可迭代提取屬性,當做字典的keys for line in f for迴圈讀取檔案日誌 dic ...
Python處理日誌之取得檔案列表
為防止log日誌過大,每隔一小時就會把重新寫log檔案,而之間的檔案則重新命名為server errors.log.yyyy dd mm nn,其中nn為序號,從00到23.鑑於我們log的基本形式,我們要分析的不僅僅是errors.log,還需要分析其他當天產生的檔案,這就需要乙個方法去取得這些檔...