本文實例為大家分享了python處理大日志文件的具體代碼,供大家參考,具體內容如下
# 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) as 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,也可以follow的參數傳進來
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
# 要讀取的長度變為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)
?以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

