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实现斐波那契递归函数的方法
Sep 08 Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
Python实现统计文本文件字数的方法
May 05 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
python ChainMap的使用和说明详解
Jun 11 Python
pandas分区间,算频率的实例
Jul 04 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
python 实现矩阵按对角线打印
Nov 29 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
python数字图像处理:图像的绘制
Jun 28 Python
Python可视化神器pyecharts绘制水球图
Jul 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实现框架(二)
2006/10/09 PHP
PHP4实际应用经验篇(7)
2006/10/09 PHP
php数组指针操作详解
2017/02/14 PHP
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
python实现猜拳小游戏
2020/04/05 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
使用python实现画AR模型时序图
2019/11/20 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
幼儿园开学家长寄语
2014/01/19 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
JS实现扫雷项目总结
2021/05/19 Javascript
vue自定义右键菜单之全局实现
2022/04/09 Vue.js
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis