使用Python从日志中获取关键性的信息到Excel
目前有这么个需求:日志密密麻麻一大堆,但是如何快速获取关键性信息?成为了我们关注的问题,不单单要获取,还要耐看。
准备好日志,查询失败的日志那一行的相关信息,上代码:
import openpyxl # 指定要查找的关键词 target_word = 'Failed,' # 打开txt文件并查找关键词 text_file = open('test.log', 'r', encoding='utf-8') data = [] for line in text_file: if target_word in line: data.append([line.strip()]) # 把查找到的行(即包含指定关键字的行)添加到元素为列表的列表中 text_file.close() # 创建Excel workbook = openpyxl.Workbook() worksheet = workbook.active # 把数据写入Excel for index, row in enumerate(data): worksheet.cell(row=index+1, column=1, value=row[0]) # 保存Excel workbook.save('get_data.xlsx')
得到的效果就是这样子:

优化版:添加了查询条件
import openpyxl file_name = 'test.log' # 文件名 keyword = 'Failed,' # 查询关键字 with open(file_name, 'r', encoding='utf-8') as f: lines = f.readlines() keyword_lines = [] # 存储关键字所在行号 for index, line in enumerate(lines): if keyword in line: keyword_lines.append(index) result = [] # 存储查询结果 for keyword_line in keyword_lines: start_index = max(0, keyword_line-5) # 上限不能超过第一行 end_index = keyword_line+1 # 下限为关键字所在行 result.extend(lines[start_index:end_index]) # 存储结果 # 创建或打开Excel文件 excel_name = 'result.xlsx' wb = openpyxl.Workbook() sheet = wb.active # 将查询结果逐行写入Excel文件 for index, r in enumerate(result): sheet.cell(row=index+1, column=1, value=r) # 保存Excel文件 wb.save(excel_name)


实践版:
import openpyxl # 指定要查找的关键词 target_word = 'real 0m' file_name = input("请输入你要检索的日志:") # 打开 txt 文件并查找关键词 text_file = open(file_name, 'r', encoding='utf-8') data = [] for line in text_file: if target_word in line: # 提取时间值 time_value = line.split('real 0m ')[1].split('s')[0] data.append([line.strip()]) text_file.close() # 创建 Excel workbook = openpyxl.Workbook() worksheet = workbook.active # 把数据写入 Excel for index, row in enumerate(data): worksheet.cell(row=index + 1, column=1, value=row[0]) if row[0]: try: time_value = row[0].split('real 0m ')[1].split('s')[0] result = 125 / float(time_value) worksheet.cell(row=index + 1, column=5, value=f'{result:.2f} M/s') except ValueError: worksheet.cell(row=index + 1, column=5, value='错误') # 保存 Excel workbook.save('get_data.xlsx')


浙公网安备 33010602011771号