前一阵子有个同事说,他看不懂从kibana上拉下来的日志,但是又想分析一些数据,感觉很头痛,每次都找开发给他整理一下,但是开发也很忙,要数据的频率也略高,那时候正好我跟这位需求方的项目,负责测试工作。然后,我晚上加班的时候就帮他写了一个很小的程序,帮助这位需求方同事可以随时查看数据。也不会占用任何人太多时间。
解决思路:
一、读取原始报表
这里的config.ini中放的是原始报表名称
[filenames]file_name=XXXXXX.csv
二、拆分数据
三、按照既定规则计算符合flag的数据
四、拼接数据,形成新的报表输出
'''@create on : 20190311@Update : 20190311@description: 该模块可以直接获取最直观的报表'''import pandas as pdimport configparserimport osimport json# 获取项目根目录dirpath = os.path.dirname(os.path.realpath(__file__))# 拼接时候注意一下,会从第一个带有斜杠的地址开始拼接sencondpath = os.path.join(dirpath, "log_file")config = configparser.ConfigParser()config.read("config.ini")filename = config.get("filenames", "file_name")# 改config.ini中的文件名自动拼接finalpath = os.path.join(sencondpath, filename)# 读入的CSV数据对象log_df = pd.read_csv(finalpath, encoding="utf-8")print(log_df)# 半成品矩阵def mergedf(): df_right = log_df['message'] df_left = log_df['@timestamp'] result_df = pd.concat([df_left, df_right], axis=1) return result_dfdef oprate_df(): # 计算有多少符合数据旗标 flag = 0 df_size = log_df.__len__() urlParams, jrtt_reports, convert_ids = [], [], [] try: goal_df = mergedf() for line in range(df_size): data_row = json.loads(log_df.loc[line, 'message']) print(log_df.loc[line, '@timestamp']) if data_row["data"]["jrtt_report"] is not None and data_row["data"]["convert_id"] is not None: flag = flag + 1 line = line + 1 urlParams.append(data_row["data"]["urlparams"]) jrtt_reports.append(data_row["data"]["jrtt_report"]) convert_ids.append(data_row["data"]["convert_id"]) print(flag) except Exception as e: print("日志文件解析出错" + str(e)) try: goal_df.insert(0, 'uelParmas', urlParams) goal_df.insert(0, 'jrtt_repot', jrtt_reports) goal_df.insert(0, 'convert_id', convert_ids) except Exception as e: print("矩阵组合出错!"+str(e)) #print(goal_df) return goal_dfif __name__ == '__main__': total_df = oprate_df() excelFile = "D:/anylysis/dataResult/workResult.xlsx" writer = pd.ExcelWriter(excelFile) total_df.to_excel(writer, 'FinalResult') writer.save()