python读取指定行日志_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)

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、运行方式和结果。[root@localhost ~]# 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(srcfile,search,decfile):

try:

f=open(srcfile,'r')

try:

while True:

lines = f.readlines(100)

if not lines:

break

for line in lines:

if(line.find(search)>=0):

writenewfile(line,decfile)

finally:

f.close()

print '*'*21+"END"+"*"*21

except IOError:

print srcfile+" not find!"

def writenewfile(line,decfile):

try:

newfile=open(decfile,'a')

try:

newfile.write(line)

finally:

newfile.close()

except IOError:

print decfile+"not find!!"

def makefile(srcfile,search):

print '*'*20+"START"+"*"*20

namesplit=re.split('\.',srcfile)

decfile=namesplit[0]+search+"."+namesplit[1]

openfile(srcfile,search,decfile)

if __name__=='__main__':

makefile(sys.argv[1],sys.argv[2])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值