前一阵子有个同事说,他看不懂从kibana上拉下来的日志,但是又想分析一些数据,感觉很头痛,每次都找开发给他整理一下,但是开发也很忙,要数据的频率也略高,那时候正好我跟这位需求方的项目,负责测试工作。然后,我晚上加班的时候就帮他写了一个很小的程序,帮助这位需求方同事可以随时查看数据。也不会占用任何人太多时间。
解决思路:
一、读取原始报表
这里的config.ini中放的是原始报表名称
[filenames] file_name=XXXXXX.csv
二、拆分数据
三、按照既定规则计算符合flag的数据
四、拼接数据,形成新的报表输出
‘‘‘
@create on : 20190311
@Update : 20190311
@description: 该模块可以直接获取最直观的报表
‘‘‘
import pandas as pd
import configparser
import os
import 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_df
def 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_df
if __name__ == ‘__main__‘:
total_df = oprate_df()
excelFile = "D:/anylysis/dataResult/workResult.xlsx"
writer = pd.ExcelWriter(excelFile)
total_df.to_excel(writer, ‘FinalResult‘)
writer.save()
原文:https://www.cnblogs.com/yuki-nana/p/10803116.html