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