如何从日志文件中提取含'message'行后的字节行并分组存储
解决方法
你当前的代码只使用了一维列表存储数据,所以所有匹配的字节行都会被存入同一个列表,只需要改为使用二维列表存储,每次遇到包含message的行时新建一个独立的子列表存储对应字节行即可,同时修正你代码里的变量名笔误和文件资源释放问题。
修改后的完整代码
def analyse_file(self,file_name): result = [] # 二维列表,每个元素对应一个message行的字节列表 # 使用with上下文管理器自动关闭文件,避免资源泄漏 with open(file_name, 'r', encoding = "latin-1") as input_file: file_lines = input_file.readlines() for i in range(len(file_lines)): if "message" in file_lines[i]: current_list = [] # 新建当前message对应的独立子列表 # 遍历当前message行之后的所有内容 for j in range(i+1, len(file_lines)): m = file_lines[j].split() # 增加空行判断,避免空行split后取m[0]报错 if not m or len(m[0]) != 6: break # 修正原代码的变量名笔误:log_file_lines改为file_lines byte_line = file_lines[j].strip() # 可去掉strip保留原始行尾换行符 current_list.append(byte_line) # 只把非空的子列表加入结果,过滤匹配到message后无字节行的空列表 if current_list: result.append(current_list) return result
调用示例
# 调用方法后得到的是包含所有子列表的二维数组 all_lists = your_object.analyse_file("你的日志文件路径.log") list1 = all_lists[0] list2 = all_lists[1] list3 = all_lists[2] # 后续可分别对每个列表做解码处理
内容的提问来源于stack exchange,提问作者It Engineer
相关产品推荐
相关产品推荐

