基于python的日志分析程序(解压缩 按关键字抽文件和日志行)

1.过程:解压文件并复制文件到指定的位置
解压缩.gz的文件:
使用gzip
例程:

import os
import re
import gzip
import shutil
# 解压文件
filePath = 'E:\\0.TLBOX文件整理\\17.千里眼测试\DS测试\9.18\home\\npsdk\log\\npsdk\\'
objPath = 'E:\\0.TLBOX文件整理\\17.千里眼测试\DS测试\9.18\\'
fileList = os.listdir(path=filePath)
gz_end = re.compile("gz$") #匹配以gz结尾的字符串
for file in fileList:
    mo_file = gz_end.search(file)
    if mo_file != None:
        print(file)
        print(filePath+file)
        f_name = file.replace(".gz", "")  # 进行重命名  去掉结尾的.gz
        g_file = gzip.GzipFile(filePath+file) # 解压指定目录的gz文件
        open(f_name,"wb+").write(g_file.read()) # 将解压后的文件内容写入到文件内
        shutil.copyfile(f_name,objPath+f_name)    # 复制文件
        g_file.close()
        os.remove(f_name)

使用到的内容:
re:正则表达式,匹配待处理的文件名字
os:进行文件删除等操作
shutil:复制文件到指定位置
gzip:解压和压缩文件
2. 程序主体:

#! C:\Python\Python36
# -*- coding: utf-8 -*-
# @Time : 2021/9/22 16:58
# @Author : liuchengyong
# @File : fileAnalysis.py
# @Software: PyCharm
# 分析文件程序
# 定义各种参数
import os
import shutil
import gzip
import re
import time
npPath = 'E:\\0.TLBOX文件整理\\17.千里眼测试\DS测试\9.18\home\\npsdk\log\\npsdk\\' #
spPath = 'E:\\0.TLBOX文件整理\\17.千里眼测试\DS测试\9.18\home\\npsdk\log\\south\\'
filePath = 'E:\\0.TLBOX文件整理\\17.千里眼测试\DS测试\9.18\\'
northLog = 'log'
proTcpLog = 'ProtocolModbusTcp'
proLog = 'ProtocolModbus'
dataprocLog = 'DataProc'
southLog = 'DeraSP'
offlineKey = ['device offline','create offline','devstatus']
gz_end = re.compile('gz$')
logList = []


# 解压gzip文件到指定位置
def gzipFile(gzPath,filePath):
    gzList = os.listdir(path=gzPath)
    for file in gzList:
        labelFile = gz_end.search(file)
        if labelFile != None:
            f_name = file.replace(".gz","")
            g_file = gzip.GzipFile(gzPath+file)
            open(f_name,"wb+").write(g_file.read())
            time.sleep(0.1)
            shutil.copyfile(f_name,filePath+f_name)
            g_file.close()
            os.remove(f_name)

# 文件抽取内容,在找到指定的文件之后,按照关键字抽取日志中的行
def fileExtract(fileList,keyWord):
    print("extract")
    for file in fileList:
        with open(filePath+file,'r') as f:
            while True:
                m = f.readline()
                xList = []
                for Word in keyWord:
                    x = m.rfind(Word)
                    xList.append(x)

                for x in xList:
                    if x != -1:
                        logList.append(m)
                        break
                if m == '':
                    break
# 时间段选择 按照给定的时间起止点,抽取特定时间段
def timeExtract(fileList,timePeriod):
    for file in fileList:
        with open(file,'r') as f:
            while True:
                m = f.readline()
                # print(m)
                # print(type(m))
                # print(m[0:23])
                if m[0:23] >= timePeriod[0] and m[0:23] <= timePeriod[1]:
                    logList.append(m)
                if m == '':
                    break

# 文件选择+关键字提取 按照文件名字的关键字提取文件  按照文件内的关键字提取日志内容  
def fileListExtract(path,keyWordF,keyWordL):
    # 列出文件 从中进行判断
    kList = []
    re_key = re.compile("^"+keyWordF)
    fList = os.listdir(path)
    for file in fList:
        labelF = re_key.search(file)
        if labelF != None:
            kList.append(file)
    print(kList)
    fileExtract(kList, keyWordL)
# 写入抽取的日志到指定文件
def fileWrite(terFile):
    with open(terFile, 'w') as f2:
        for offline in logList:
            f2.writelines(offline)

def main():
    npFile = 'npoffline.txt'
    spFile = 'spoffline.txt'
    gzipFile(spPath,filePath)
    fileListExtract(filePath,dataprocLog,offlineKey)
    fileWrite(spFile)
    gzipFile(npPath, filePath)
    fileListExtract(filePath,  northLog, offlineKey)
    fileWrite(npFile)




if __name__ == '__main__':
    main()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值