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中处理字符串之islower()方法的使用简介
May 19 Python
Python在线运行代码助手
Jul 15 Python
Python和C/C++交互的几种方法总结
May 11 Python
Python模块搜索路径代码详解
Jan 29 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
python的re模块使用方法详解
Jul 26 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
python实现超市商品销售管理系统
Nov 22 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
一文解决django 2.2与mysql兼容性问题
Jul 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
global.php
2006/12/09 PHP
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
js中生成map对象的方法
2014/01/09 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
python cs架构实现简单文件传输
2020/03/20 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
【python】matplotlib动态显示详解
2019/04/11 Python
Python简单基础小程序的实例代码
2019/04/28 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
python中删除某个元素的方法解析
2019/11/05 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
什么是python的函数体
2020/06/19 Python
python opencv肤色检测的实现示例
2020/12/21 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
法人代表委托书
2014/04/04 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书