获取log文件信息,并保存至Excel文件

获取log文件信息,并保存至Excel文件

	日常工作中,可能需要我们从txt文件中截取海量的信息,只要寻找到这种信息的规律或者定位好信息情况,在我的txt文件中有海量的信息,而我只需要截取09/11/2020 15:09:22.426	log	<K_DATA_UNITS_WRITTEN>349505500</K_DATA_UNITS_WRITTEN>

字段中的 1.09/11/2020 15:09:22.426 log
2.349505500
这样两个部分的内容。

#获取log文件信息,并保存至Excel文件
利用到的知识点:1.python正则表达式的基本使用
2.openpyxl的基本操作
3.txt文件内容与保存至Excel文件的交互

库导入

import re       #正则
import os       #文件操作
import time     #获取系统时间
#import openpyxl as opxl
from openpyxl import workbook       #workbook文件的创建
from openpyxl import load_workbook  #装载定位表

#建立python 入口函数

def main():
    #文件的基本要素
    get_log_target = 'quality_ya_li_ji_suan'       # 抓取log信息的主要目的
    file_name_pre =  get_log_target                # 把获取log的目的作为文件名的前缀
    file_name_suffix = 'SDL722J20144A01'           # 把获取的SN盘作为文件名的后缀
    file_name_date = time.strftime("%Y%m%d%H%M%S", time.localtime())   # 文件名时间部分
    file_extension = '.xlsx'                       #保存Excel文件的扩展名
    file_path = r'E:\OKN\client\inspur\R2\性能计算\压力计算'            # 获取log的路径

	creat_excel(get_log_target,file_name_pre,file_name_suffix,file_name_date,file_extension,file_path)
if __name__ == "__main__":
    main()

#上面是函数的基本组成
##但是基本的主要操作都是在函数creat_excel

#具体的函数如下:
##仅供参考
#库导入

import re       #正则
import os       #文件操作
import time     #获取系统时间
#import openpyxl as opxl
from openpyxl import workbook       #workbook文件的创建
from openpyxl import load_workbook  #装载定位表
#Excel:表格的基本组成:workbook -> sheet -> cell -> cell(行列号定位cell)

def creat_excel(get_log_target,file_name_pre,file_name_suffix,file_name_date,file_extension,file_path):
    """
    创建文件并且写入从log获取信息且写入Excel内
    :param get_log_target: 获取log信息的目的
    :param file_name_pre: 保存Excel文件的前缀 --> file_name_pre =get_log_target
    :param file_name_suffix: 保存Excel文件的后缀
    :param file_name_date: 创建Excel文件的时间
    :param file_extension: Excel文件的扩展名
    :param file_path:读取文件路径
    :return:
    """
    file_name_connecter = '_'       # 文件名连接符

    # 保存文件名:文件前缀 + 文件后缀 + 系统时间.文件扩展名
    save_file_name = file_name_pre + file_name_connecter + file_name_suffix + \
                     file_name_connecter + file_name_date + file_extension

    # 创建Excel文件
    exworkbook = workbook.Workbook()
    # 创建一个sheet表 ,并且以获取log目的为sheet表名
    exworkbook.create_sheet(file_name_suffix,index = 0 )
    #保存 Excel工作薄,
    #save_info = file_path + r'\\' + save_file_name      # r'\\' 解析目标 '\' :(python解析'\'歧异,利用r'\\'替代 '\')
    save_file = file_path + save_file_name  # r'\\' 解析目标 '\' :(python解析'\'产生歧异,利用r'\\'替代 '\')
    exworkbook.save(save_file)
    #print(get_log_target)

    # 打开工作薄
    open_work = load_workbook(save_file)
    # 定位到表单
    open_sheet = open_work[file_name_suffix]

    #search_feil :要查找的内容
    search_low_lba = 'low_lba'                  #
    search_high_lba = 'high_lba'                #
    search_num_writes = 'num_writes'            #
    search_total_lbas_writtrn = 'total_lbas_written'        #
    search_quality_ya_li_ji_suan = 'quality_ya_li_ji_suan'  #
    search_k_data_units_writer = 'K_DATA_UNITS_WRITTEN'     #
    search_k_data_units_read = 'K_DATA_UNITS_READ'          #

    search_fild_list = [search_low_lba,search_high_lba,search_num_writes,search_total_lbas_writtrn,
                        search_quality_ya_li_ji_suan,search_k_data_units_writer,search_k_data_units_read]
    print('search field len:{}'.format(len(search_fild_list)))

    #cell基本单元的组成元素的累计
    row_count = 1
    columns_count = 1
    file_log_num = 1
    #列表标题
    head_lst_columns = ['event_date_w','k_data_units_w','event_date_r','k_data_units_r']
    #向sheet写入列表标题
    for i,lie_biao_bian_li in enumerate(head_lst_columns):
        open_sheet.cell(1,columns_count ).value = head_lst_columns[i]
        columns_count += 1
    #open_sheet.cell(1, 1).value = ''
    #open_sheet.cell(1, 2).value = '年龄'

    #利用正则,进行切割 re :match,search,find
    #date spilt

    date_patter_01 = r'\d{2}/\d{2}/\d{4}\s'
    date_patter_02 = r'\d{2}:\d{2}:\d{2}\.\d{3}'
    make_up = date_patter_01 + date_patter_02
    #主要信息截取
    long_paater = r'<(\w+)>(.*)<(/\1)>'
    #long_paater_01 = r'<(\w+)>.*</(/\1)>'
    #long_03 = re.search(long_paater, long_info)

    for root, dirs, files in os.walk(file_path):
        print('root\t:{},\n'
              'dirs\t:{},\n'
              'file_name\t:{}.'.format(root,dirs,files))
        #file_log_num += 1

        for file in files:
            sub_log_file = os.path.join(file_path,file)
            fp = open(sub_log_file,encoding='utf-8')
            print('\n第 {} 个 测试log文件:\n'
                  '文件名:{}\n'.format(file_log_num,file))
            file_log_num += 1

            for line_field in fp.readlines():
                #row_count += 1
                if search_k_data_units_writer in line_field:
                    date = re.search(make_up,line_field)
                    zhuyao = re.search(long_paater,line_field)
                    #print('%s' %line_field,end='')
                    row_count += 1
                    open_sheet.cell(row_count,1).value = date.group()
                    open_sheet.cell(row_count,2).value = int(zhuyao.group(2))

                if search_k_data_units_read in line_field:
                    date = re.search(make_up, line_field)
                    zhuyao = re.search(long_paater, line_field)
                    # print('%s' %line_field,end='')

                    open_sheet.cell(row_count, 3).value = date.group()
                    open_sheet.cell(row_count, 4).value = int(zhuyao.group(2))
                    #row_count += 1

        #保存文件
        open_work.save(save_file)

        #关闭文件
        open_work.close()

def get_log_info_and_writer_excel():
    pass

#主函数 main()
def main():
    #文件的基本要素
    get_log_target = 'quality_ya_li_ji_suan'       # 抓取log信息的主要目的
    file_name_pre =  get_log_target                # 把获取log的目的作为文件名的前缀
    file_name_suffix = 'SDL722J20144A01'           # 把获取的SN盘作为文件名的后缀
    file_name_date = time.strftime("%Y%m%d%H%M%S", time.localtime())   # 文件名时间部分
    file_extension = '.xlsx'                       #保存Excel文件的扩展名
    file_path = r'E:\client\R2\性能计算\压力计算'            # 获取log的路径

    creat_excel(get_log_target,file_name_pre,file_name_suffix,file_name_date,file_extension,file_path)

if __name__ == "__main__":
    main()

最终效果如下

在这里插入图片描述

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值