python处理大日志文件


Posted in Python onJuly 23, 2019

本文实例为大家分享了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中global与nonlocal比较
Nov 21 Python
Python合并两个字典的常用方法与效率比较
Jun 17 Python
详解在Python的Django框架中创建模板库的方法
Jul 20 Python
python迭代器与生成器详解
Mar 10 Python
python遍历目录的方法小结
Apr 28 Python
python 容器总结整理
Apr 04 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
pytorch 实现在测试的时候启用dropout
May 27 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
python 实现图片特效处理
Apr 03 Python
Django urls.py重构及参数传递详解
Jul 23 #Python
Django框架基础模板标签与filter使用方法详解
Jul 23 #Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 #Python
Python中拆分字符串的操作方法
Jul 23 #Python
python实现电子书翻页小程序
Jul 23 #Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 #Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 #Python
You might like
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
用PHP实现维护文件代码
2007/06/14 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
javascript hasFocus使用实例
2010/06/29 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
js自定义事件代码说明
2011/01/31 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python求最大值最小值方法总结
2019/06/25 Python
python分布式编程实现过程解析
2019/11/08 Python
python 创建一维的0向量实例
2019/12/02 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
python3.7添加dlib模块的方法
2020/07/01 Python
python中关于数据类型的学习笔记
2020/07/19 Python
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
逃课上网检讨书
2014/02/20 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
贷款承诺书
2015/01/20 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
初中政治教学工作总结
2015/08/13 职场文书