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使用xmlrpc实例讲解
Dec 17 Python
Python数据操作方法封装类实例
Jun 23 Python
python利用rsa库做公钥解密的方法教程
Dec 10 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
python 字符串和整数的转换方法
Jun 25 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
python简单验证码识别的实现方法
May 10 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 Python
python中pickle模块浅析
Dec 29 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 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中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
浅谈php扩展imagick
2014/06/02 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
Jquery Datatables的使用详解
2020/01/30 jQuery
vue实现打地鼠小游戏
2020/08/21 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
用python处理MS Word的实例讲解
2018/05/08 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
python批量解压zip文件的方法
2019/08/20 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
股指期货心得体会
2014/09/10 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
保险公司增员口号
2015/12/25 职场文书
php引用传递
2021/04/01 PHP
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
Python 中 Shutil 模块详情
2021/11/11 Python