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 相关文章推荐
python3图片转换二进制存入mysql
Dec 06 Python
python去掉字符串中重复字符的方法
Feb 27 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
python实现微信小程序自动回复
Sep 10 Python
python+splinter自动刷新抢票功能
Sep 25 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
使用TFRecord存取多个数据案例
Feb 17 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
python 实现学生信息管理系统的示例
Nov 28 Python
Python实现FTP文件定时自动下载的步骤
Dec 19 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中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
php简单获取复选框值的方法
2016/05/11 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python求最大连续子数组的和
2018/07/07 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
Java如何支持I18N?
2016/10/31 面试题
测绘工程个人的自我评价
2013/11/23 职场文书
四好少年事迹材料
2014/01/12 职场文书
招聘单位介绍信
2014/01/14 职场文书
个人简历自我评价范文
2014/02/04 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python
python3操作redis实现List列表实例
2021/08/04 Python