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之eval()函数危险性浅析
Jul 03 Python
Python读写配置文件的方法
Jun 03 Python
Python实现判断字符串中包含某个字符的判断函数示例
Jan 08 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
Python 静态方法和类方法实例分析
Nov 21 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
python 获取域名到期时间的方法步骤
Feb 10 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Python logging模块用法示例
2018/08/28 Python
python 处理string到hex脚本的方法
2018/10/26 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
Python实现点云投影到平面显示
2020/01/18 Python
Python PyQt5整理介绍
2020/04/01 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
JBL英国官网:JBL UK
2018/07/04 全球购物
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
生产操作工岗位职责
2014/09/16 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
东京审判观后感
2015/06/01 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript