python处理大日志文件

作者:暴走的鹏鹏哥哥 时间:2021-11-09 22:21:14 

本文实例为大家分享了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)

来源:https://blog.csdn.net/kepengs/article/details/84680398

标签:python,日志文件
0
投稿

猜你喜欢

  • JavaScript:ES2019 的新特性(译)

    2024-04-10 16:16:57
  • 解决python中导入win32com.client出错的问题

    2023-02-17 11:01:45
  • 导致sql执行速度慢的几种情况盘点(生产环境踩过的坑)

    2024-01-17 17:07:21
  • SQL Server误区30日谈 第10天 数据库镜像在故障发生后 马上就能发现

    2024-01-13 02:40:08
  • JavaScript中一个奇葩的IE浏览器判断方法

    2024-04-17 10:24:44
  • python 实现dict转json并保存文件

    2022-04-17 10:24:17
  • Python 用turtle实现用正方形画圆的例子

    2022-08-05 13:56:33
  • Windows7中配置安装MySQL 5.6解压缩版

    2024-01-26 16:02:34
  • python从入门到实践之字典

    2023-05-11 22:20:17
  • 6个网站改版时需要注意的问题

    2010-02-26 10:47:00
  • MySQL的DATE_FORMAT函数的使用

    2024-01-18 09:52:28
  • PyTorch上搭建简单神经网络实现回归和分类的示例

    2022-08-02 04:49:42
  • Python使用post及get方式提交数据的实例

    2023-06-25 05:52:35
  • python学习入门细节知识点

    2022-09-07 06:40:53
  • Python中提取人脸特征的三种方法详解

    2023-11-06 09:38:04
  • MySQL笔记之触发器的应用

    2024-01-18 17:23:32
  • vue实现点击图片放大效果

    2024-05-21 10:30:28
  • PHP实现从上往下打印二叉树的方法

    2023-06-25 17:40:08
  • 从零开始学习Node.js系列教程二:文本提交与显示方法

    2024-05-08 09:35:30
  • Python使用Py2neo创建Neo4j的节点和关系

    2023-07-20 02:51:45
  • asp之家 网络编程 m.aspxhome.com