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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python3.2模拟实现webqq登录
Feb 15 Python
Python脚本实现自动发带图的微博
Apr 27 Python
深入探究Django中的Session与Cookie
Jul 30 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
wxpython绘制圆角窗体
Nov 18 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
Python importlib动态导入模块实现代码
Apr 16 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
python mock测试的示例
Oct 19 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 Python
浅析Python中的随机采样和概率分布
Dec 06 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 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
php图片上传类 附调用方法
2016/05/15 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
Python与Redis的连接教程
2015/04/22 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
初中生期末考试的自我评价
2013/12/17 职场文书
学校捐书倡议书
2015/04/27 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android