python使用正则表达式解析文件并将数据保存到excel

工作需要解析log中的内容,要将log中的一些固定格式的内容取出。平时使用C++开发,python是入门级,正则则是现学现买。 一个log解析的工具,使用C++开发感觉太费时,于是用了python。

首先log里的内容是这样子的:

log:Debug:··········(各种内容)

log:info:··········(各种内容)

log:warn:··········(各种内容)

工作内容就是在这各种内容里找到 {数值1;数值2.1,数值2.3;字串}这种格式的内容,并把数据解析出来保存到excel文件中。

0.导入需要的库

import re
import xlsxwriter

1.读取log文件

with open("ConnServer.txt", mode='r') as file:
        for line in file:

使用迭代的方法读取,以免遇到大文件导致内存不足的异常。

 

2.在每行中找特定格式的内容

res = re.findall('{[^}]+}', line, re.S)
            if 0 == len(res):
                continue

使用正则表达式 {[^}]+} 。这个正则表达式能很好的匹配一条目标格式的内容。如果用{.^}处理连续的目标内容(比如 目标内容1目标内容2目标内容3)就不能讲这些内容单独的分开。在开始的时候用match,因为match是从首字符开始匹配正则表达式,所以得到返回结果都是None。search可以在给定的字符串中查找知道找到匹配的内容,findall也是能在给定的字符串中查找直到找到匹配的内容。使用findall是因为返回值是list类型,比较适合入门选手来处理······

 

3.分析每一个目标内容

log = log.replace("{", ";")
log = log.replace("}", ";")
log = log.replace(",", ";")
data = []
res = re.findall(';[^;]+', log, re.S)

首先把目标内容中的 “{” 和 “,”都替换成“;”方便接下来使用正则表达式拆出每个数据。用;[^;]+解析修改过的log,这样res中保存的都是以 “;”开头的字符串,而且“;”就是每个数据。然后直接截取string中的内容就可以得到数据了。

 

4.保存数据到excel中

    

file = xlsxwriter.Workbook("Data.xlsx") 

    row = 0
    tableIndex = 1
    table = file.add_worksheet(str(tableIndex))
    
    for data in dataList:
        if row >= MaxRowIndex:
            tableIndex += 1
            row = 0
            table = file.add_worksheet(str(tableIndex))
        
        col = 0
        for value in data:
            table.write(row,col,value)
            col += 1
        row += 1
        
    file.close()

使用xlwt写excel的话只能保存为xls格式,xls格式最多支持65536行,超过的话python会抛出异常。xlsxwriter可以保存为xlsx格式最多支持1048576行。考虑到数据还是有可能超出,所以对每张sheet写入的行数做了限制,超过后新建sheet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值