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检测远程udp端口是否打开的方法
Mar 14 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
Python中统计函数运行耗时的方法
May 05 Python
Python中的条件判断语句与循环语句用法小结
Mar 21 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
python字典的setdefault的巧妙用法
Aug 07 Python
Python any()函数的使用方法
Oct 28 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 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的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
Python中的异常处理学习笔记
2015/01/28 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
Django配置文件代码说明
2019/12/04 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
土木工程个人自荐信范文
2013/11/30 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
Pandas搭配lambda组合使用详解
2022/01/22 Python