python处理大日志文件

yipeiwu_com6年前Python基础

本文实例为大家分享了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)

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python中使用pypdf2合并、分割、加密pdf文件的代码详解

朋友需要对一个pdf文件进行分割,在网上查了查发现这个pypdf2可以完成这些操作,所以就研究了下这个库,并做一些记录。首先pypdf2是python3版本的,在之前的2版本有一个对应p...

对Python多线程读写文件加锁的实例详解

Python的多线程在io方面比单线程还是有优势,但是在多线程开发时,少不了对文件的读写操作。在管理多个线程对同一文件的读写操作时,就少不了文件锁了。 使用fcntl 在linux下,p...

使用Python给头像加上圣诞帽或圣诞老人小图标附源码

使用Python给头像加上圣诞帽或圣诞老人小图标附源码

随着圣诞的到来,想给给自己的头像加上一顶圣诞帽。如果不是头像,就加一个圣诞老人陪伴。 用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章:https://zh...

django实现分页的方法

本文实例讲述了django实现分页的方法。分享给大家供大家参考。具体如下: Python代码如下: #!/usr/bin/env python # -*- coding: utf-8...

Python 实现取矩阵的部分列,保存为一个新的矩阵方法

首先输入一个矩阵: >>> b=[[1,2,3,4,5,6],[2,2,3,4,5,6],[3,2,3,4,5,6],[4,2,3,4,5,6],[5,2,3,4,...