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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
Django密码系统实现过程详解
Jul 19 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
Python3操作MongoDB增册改查等方法详解
Feb 10 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
pytorch 中nn.Dropout的使用说明
May 20 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的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
vue webpack打包优化操作技巧
2018/02/22 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python AES加密实例解析
2018/01/18 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
奠基仪式策划方案
2014/05/15 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
就业协议书样本
2014/08/20 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
安全生产年活动总结
2014/08/29 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
入党积极分子考察意见
2015/06/02 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
话题作文之诚信
2019/11/28 职场文书
python实现会员信息管理系统(List)
2022/03/18 Python
浅析JavaScript中的变量提升
2022/06/01 Javascript