python處理大日誌檔案

2022-09-28 04:54:07 字數 1898 閱讀 8009

# 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,還需要分析其他當天產生的檔案,這就需要乙個方法去取得這些檔...