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 相关文章推荐
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
Jan 22 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
Python使用CMD模块更优雅的运行脚本
May 11 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
python中的decorator的作用详解
Jul 26 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 Python
python全栈开发语法总结
Nov 22 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
消息持续发送的完整例子
2006/10/09 PHP
用PHP制作的意见反馈表源码
2007/03/11 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP中读写文件实现代码
2011/10/20 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
js jquery数组介绍
2012/07/15 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
js图片上传的封装代码
2017/08/01 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
简单了解python协程的相关知识
2019/08/31 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
什么是servlet
2012/05/08 面试题
施工材料员岗位职责
2014/02/12 职场文书
希特勒的演讲稿
2014/05/23 职场文书
法律专业求职信
2014/05/24 职场文书
教师节座谈会主持词
2015/07/03 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书