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

论坛 期权论坛 脚本     
匿名技术用户   2020-12-27 04:58   11   0

工作需要解析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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP