python 截取某一天的日志,简单操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 截取某一天的日志,简单操作相关的知识,希望对你有一定的参考价值。

1、解释大神之作,致敬“种心收默”(http://www.cnblogs.com/drgcaosheng/p/3747820.html)

#!/usr/bin/python
#-*- coding:utf-8 -*-

import re,sys
def openfile(*args):
    print args
    try:
        f=open(args[0],'r')   #args[0]表示要打开的文件,第一个参数下标的值
        try:
            while True:
                lines = f.readlines(100)   #每次读取100行
                if not lines:   #假如没有行了,则跳出整个循环
                    break
                for line in lines:  #循环每一行
                    if(line.find(args[1])>=0):  #args[1]表示要搜索的文字,第二个参数下标的值
                        writenewfile(line,args[2])  #假如存在搜索的关键字,然后传到writenewfile函数,args[2]表示新文件
        finally:
            f.close()
            print '*'*21+"END"+"*"*21   #打印结束星号
    except IOError:
        print args[0]+" not find!"

                
def writenewfile(*args):   #定义写入新文件
    try:
        newfile=open(args[1],'a')  #追加模式打开新文件,没有会自动建一个
        try:
            newfile.write(args[0])    #一行一行的写到新文件中
        finally:
            newfile.close()
    except IOError:
        print args[1]+"not find!!"   #如果错误就提示新文件找不到

                
def chuli(*args):
    print '*'*20+"START"+"*"*20    #打印开始星号
    logre=re.split('\.',args[0])   #按点切割文件名(所以文件名要有点号)
    newlogfile=logre[0]+args[1]+"."+logre[1]   #新文件的名字等于第一个点号前面+你搜索字符+点号+第一个点号后面的字符
    openfile(args[0],args[1],newlogfile)   #调用openfile函数,args[0]和args[1]是chuli传过来sys.argv[1],sys.argv[2]。

        
if __name__=='__main__':
    chuli(sys.argv[1],sys.argv[2])   #获取python cao.py 104.250.149.146-test.log "Dec 18"的实际参数传给chuli函数的args[0]和args[1]


2、运行方式和结果。

[[email protected] ~]# python cao.py 104.250.3.77-test.log "Dec 18"
********************START********************
('104.250.3.77-test.log', 'Dec 18', '104Dec 18.250')
*********************END*********************



执行顺序如下:
(1)、先调用chuli函数,将python cao.py命令后实际的2个参数传递给chuli函数。
(2)、执行chuli函数,打印开始的*号,生成新文件名,并调用openfile函数,并且将三个参数传给了openfile函数。
(3)、执行openfile函数,读取文件,搜索关键字,搜索完成后调用writenewfile函数,写入新文件中。
(4)、执行writenewfile函数,以追加方式打开新文件,然后把匹配的行一行一行写入到新文件中。



3、小弟python知识、逻辑有限,*args传多个值把我搞晕了,所以我改下:

#!/usr/bin/python
#-*- coding:utf-8 -*-
 
import re,sys
 
def openfile(filename,searchkey,outfilename):   #定义openfiles函数
    try:
        f=open(filename,'r')    #filename表示要打开的文件,第一个参数下标的值
        try:       
            while True:
                lines = f.readlines(100)    #每次读取100行
                if not lines:    #假如没有行了,则跳出整个循环
                    break
                for line in lines:   #循环每一行
                    if(line.find(searchkey)>=0):     #searchkey表示要搜索的关键字,搜索匹配行
                        writenewfile(line,outfilename)  #假如存在匹配行,然后传到writenewfile函数
        finally:
            f.close()
            print '*'*21+"END"+"*"*21
    except IOError:
        print filename+" not find!"
 
 
 
def writenewfile(line,name):    #定义writenewfile函数
    try:
        newfile=open(name,'a')   #打开文件args[1]
        try:
            newfile.write(line)
        finally:
            newfile.close()
 
    except IOError:
        print name+"not find!!"

        
def chuli(search,outfile):
    print '*'*20+"START"+"*"*20
    logre=re.split('\.',search)
    newlogfile=logre[0]+outfile+"."+logre[1]
    openfile(search,outfile,newlogfile)
 
 
if __name__=='__main__':
    chuli(sys.argv[1],sys.argv[2])


以上是关于python 截取某一天的日志,简单操作的主要内容,如果未能解决你的问题,请参考以下文章

SVN里恢复到某一天的版本操作

JavaScript怎么获得某一天的前一天日期

oracle上个月某一天的数据

java如何获取某一天的日期?

如何使用 mapreduce 和 pyspark 查找某一年某一天的频率

PHP 某一天的天数