python 实时遍历日志文件

open 遍历一个大日志文件

使用 readlines() 还是 readline() ?

总体上 readlines() 不慢于python 一次次调用 readline(),因为前者的循环在C语言层面,而使用readline() 的循环是在Python语言层面。

但是 readlines() 会一次性把全部数据读到内存中,内存占用率会过高,readline() 每次只读一行,对于读取 大文件, 需要做出取舍。

如果不需要使用 seek() 定位偏移, for line in open(‘file‘) 速度更佳。

使用 readlines(),适合量级较小的日志文件

 1 import os
 2 import time
 3
 4 def check():
 5     p = 0
 6     while True:
 7         f = open("log.txt", "r+")
 8         f1 = open("result.txt", "a+")
 9         f.seek(p, 0)
10
11         #readlines()方法
12         filelist = f.readlines()
13         if filelist:
14             for line in filelist:
15                 #对行内容进行操作
16                 f1.write(line)
17
18         #获取当前位置,为下次while循环做偏移
19         p = f.tell()
20         print ‘now p ‘, p
21         f.close()
22         f1.close()
23         time.sleep(2)
24
25 if __name__ == ‘__main__‘:
26     check()    

使用 readline(),避免内存占用率过大

 1 import os
 2 import time
 3
 4 def check():
 5     p = 0
 6     while True:
 7         f = open("log.txt", "r+")
 8         f1 = open("result.txt", "a+")
 9         f.seek(p, 0)
10
11         #while  readline()方法
12         while True:
13             l = f.readline()
14
15             #空行同样为真
16             if l:
17                 #对行内容操作
18                 f1.write(l)
19             else:
20                 #获取当前位置,作为偏移值
21                 p = f.tell()
22                 f.close()
23                 f1.close()
24                 break
25
26         print ‘now p‘, p
27         time.sleep(2)
28
29
30 if __name__ == ‘__main__‘:
31     check()
时间: 2024-08-11 12:26:15

python 实时遍历日志文件的相关文章

遍历日志文件并打印

<?phperror_reporting(E_ALL);ini_set('display_errors', 1); function load($file){ //No.1 //开始写代码,读取日志文件 $file = fopen($file,'r'); $contents = array(); while(!feof($file)) { $contents[] = fgets($file); } return $contents;} function eliminate($lines){ $n

实时读取日志文件

需求:在生成日志文件的过程中,需要实时读取该日志,需要每次读取时记录一次读取的位置,下一次从该位置读取 参考:http://sunnylocus.iteye.com/blog/694666 问题:由于我是每次读取几十行日志就停止一次,如果使用上面连接的代码RandomAccessFile.length()记录文件位置,发现记录的位置远大于读取的位置,这样为导致丢失一部分信息 方法1:因为日志是一直在写,一开始从0开始,可以先记录一下当前读取位置的的指针,下一次开始读的时候从该处再次读取 方法1需

【python学习】日志文件里IP访问最多的3个

日志文件例子: #111.172.249.84 - - [12/Dec/2011:05:33:36 +0800] "GET /images/i/goTop.png HTTP/1.0" 200 486 "http://wh.xxxx.com/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.307

python实时过滤日志脚本

大神指导作品: #!/usr/bin/python#coding:utf8 from functools import wrapsfrom time import sleepimport os RESTART='pm2 restart ios-push' # coroutine 先要用 next 语句调用一次def coroutine(fn):    @wraps(fn)    def wrapper(*args,**kwargs):        ret=fn(*args,**kwargs) 

Python 拉取日志文件paramiko

paramiko的另一篇博文:http://467754239.blog.51cto.com/4878013/1619166 场景: 在游戏行业的集群中,日志分析或许是必不可少的,那么为了更方便的管理日志,就是统一存放日志,然后入库数据库 #!/usr/bin/env python #coding:utf8 from multiprocessing import Process from datetime import * import paramiko import string import

python自定义方法处理日志文件

从命令行界面拷贝的内容包含过个">>>",函数的作用是用正则把每两个">>>"之间的字符取出来,然后把包含"Traceback..."的字符的内容去掉,再写到另一个文件中 代码: #coding=utf-8import reimport osdef clearContent(fileName):    result=[]    with open(fileName) as fp:        content=

#IT明星不是梦#利用Python进行网站日志分析

网站的访问日志是一个非常重要的文件,通过分析访问日志,能够挖掘出很多有价值的信息.本文介绍如何利用Python对一个真实网站的访问日志进行分析,文中将综合运用Python文件操作.字符串处理.列表.集合.字典等相关知识点.本文所用的访问日志access_log来自我个人的云服务器,大家可以从文末的附件中下载. 1.提取指定日期的日志 下面是一条典型的网站访问日志,客户端访问网站中的每个资源都会产生一条日志. 193.112.9.107 - - [25/Jan/2020:06:32:58 +080

python高效解析日志入库

python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如全部文件内容,可能内存不够.采取一个折中的办法,每次读若干byte(具体大小视实际情况而定). 经过测试,得到结论,在我们写代码的时候应该这样写 f = open(path,'r') for line in f : ............. 这是系统提供的一种读文件的方法,一般比我们自己每次读若干

基于c++的日志文件实现

概述 所有的商业软件或线上系统都具有日志功能,因为日志信息提供了系统启动以来的重要的操作或状态迁移记录,是追踪各种异常错误的第一手资料.绝大部分系统的日志模块会自动保留历史日志文件,即:日志文件大小达到约定上限时,自动转储到一个新的历史文件,当前文件清空并继续记录新的日志信息,例如:假设当前日志文件名为test.log, 当它的大小到达上限(例如10MB)时,就把其文件内容转储到新文件test.log.1, 然后test.log清空并继续记录新信息.根据配置不同,我们可以保留1到N份历史日志文件