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使用str & repr转换字符串
Oct 13 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
Python3实现购物车功能
Apr 18 Python
python实现控制台打印的方法
Jan 12 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
Python关于反射的实例代码分享
Feb 20 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
Nov 19 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 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
CodeIgniter中实现泛域名解析
2014/07/19 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
完美的php分页类
2017/10/24 PHP
js 火狐下取本地路径实现思路
2013/04/02 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
python从入门到精通(DAY 2)
2015/12/20 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
数据库什么时候应该被重组
2012/11/02 面试题
J2EE包括哪些技术
2016/11/25 面试题
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
优秀员工自荐书范文
2013/12/08 职场文书
婚礼证婚人证婚词
2014/01/13 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
政风行风建设责任书
2014/07/23 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
文言文辞职信
2015/02/28 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
2015年教师国培感言
2015/08/01 职场文书
Python包argparse模块常用方法
2021/06/04 Python
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技