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之有容乃大的list(4)
Sep 28 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
pandas数据分组和聚合操作方法
Apr 11 Python
PyCharm代码格式调整方法
May 23 Python
关于python2 csv写入空白行的问题
Jun 22 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
python 梯度法求解函数极值的实例
Jul 10 Python
django实现类似触发器的功能
Nov 15 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 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写MySQL数据 实现代码
2009/06/15 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP代码加密的方法总结
2020/03/13 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
Puppeteer使用示例详解
2019/06/20 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
自考自我鉴定范文
2013/10/30 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
食品安全承诺书范文
2014/08/29 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
中英文求职信范文
2015/03/19 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python