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中使用不同编码读写txt文件详解
May 28 Python
对python中的pop函数和append函数详解
May 04 Python
Win8下python3.5.1安装教程
Jul 29 Python
python代理工具mitmproxy使用指南
Jul 04 Python
python深copy和浅copy区别对比解析
Dec 26 Python
python numpy 矩阵堆叠实例
Jan 17 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
Python xlwt模块使用代码实例
Jun 10 Python
容易被忽略的Python内置类型
Sep 03 Python
Matplotlib animation模块实现动态图
Feb 25 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 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
开源SNS系统-ThinkSNS
2008/05/18 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
JS前端笔试题分析
2016/12/19 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
vue自定义指令directive实例详解
2018/01/17 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
python字典排序实例详解
2015/05/20 Python
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
大学毕业生通用自我评价
2014/01/05 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
小学数学课题方案
2014/06/15 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
房屋所有权证明
2015/06/19 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏