保存一个
1.cases.py

import json
import timefrom CheckTD import *
from CheckTxt import *# result = {"01_三电":{#                     "总电压":[],
#                     "SOC-国标":[],
#                     "绝缘电阻":[],},
#           "04_充电完成标志是否与SOC=100%一致":[]
#                        }def case():# start = time.time()data = get_excel_data('数据项导出_20220114081303_1月13号.xlsx')if data[0][10] > data[-1][10]:item03_sort = 'desc' #倒序else:item03_sort = 'asc'  #顺序for i in range(len(data)):Check_data(data,i).check_items01()# print('1')Check_data(data,i).check_items04()# print('2')Check_data(data,i).check_items05()# print('3')Check_data(data,i).check_items08()# print('4')Check_data(data,i).check_items20()# print('5')Check_data(data,i).check_items21()# print('6')Check_data(data,i).check_items22()# print('7')Check_data(data,i).check_items24()# print('8')Check_data(data,i).check_items25()# print('9')Check_data(data,i).check_items26()   # print('10')Check_data(data,i).check_items28and29()# print('11')Check_data(data,i).check_items30() # print('12')Check_data(data,i).check_items31() # print('13')Check_data(data,i).check_items32() # print('14')r_list03 = Check_data(data,i).check_items03(item03_sort)if r_list03 is not None:print(r_list03)print('今日总里程: '+str(round(float(data[len(data)-1][10])-float(data[0][10]),1))+'')print('-----excel数据检查完毕-----')print()# log数据检查gps = "GPS:02 V"tferr='TF: ERR 5'reset='Reset: 00'wakeup_failed='wake up MPU Failed'base_path = "E:\lushi\Jan"       # 文件存储路径# base_path = os.getcwd()    # 用于返回当前工作目录filename = base_path + '\\' + "13.txt"f = open(filename,'r')# print(filename)with open(filename) as f:count=0for lines in f:count=count+1if gps in lines:print("GPS:02 V\nline:",count, lines)if tferr in lines:print('TF: ERR 5 \nline:',count, lines)if reset in lines:print('Reset:00 \nline:',count, lines)if wakeup_failed in lines:print('wake up MPU Failed,\nline: ',count, lines)print('-----SD卡log数据检查完毕-----')# end = time.time()# print(str(end-start))if __name__ == '__main__':case()

2.CheckTD.py

import os,openpyxl,sys,json,yaml,redef get_excel_data(f_name):'''平台勾选基本信息、整车数据、驱动电机数据、车辆位置信息、电池数据、报警数据后直接导出即可这里直接筛除了前3行飞数据的部分'''base_path = "E:\lushi"       # 文件存储路径# base_path = os.getcwd()    # 用于返回当前工作目录path = base_path + '\\' + f_namesheet_name = openpyxl.load_workbook(path).sheetnamesSheet = openpyxl.load_workbook(path)[sheet_name[0]]key_list = []for key in Sheet[3]:key_list.append(key.value)data = []# data_l = []for row in range(4,Sheet.max_row+1):row_list = []row_dict = {}for i in Sheet[row]:row_list.append(i.value)# print(row_list)# for l in range(len(row_list)):#     row_dict[key_list[l]] = row_list[l]# print(row_dict)# data.append(row_dict)data.append(row_list)# print(data)return dataclass Log_wt():def __init__(self):passdef get_temp(self):with open('fail_log/temp.txt','r',encoding='utf8') as f:t = f.read()t = eval(t)# print(type(t))# print(t)return tdef wt_txt(self,data):data = json.dumps(data, ensure_ascii=False)with open('fail_log/log.txt','w',encoding='utf8') as f_log:f_log.write(str(data))def get_yaml_temp(self):with open('fail_log/f_temp.yaml','r',encoding='utf8') as f:t = yaml.load(f.read(),Loader=yaml.Loader)print(t)return tdef wt_yaml(self,data):with open('fail_log/f_log.yaml','w',encoding='utf8') as f:yaml.dump(data, f,Dumper=yaml.Dumper,allow_unicode=True)class Check_data():def __init__(self,data,i):''':param data: 导出的数据项数据:param i: 第几条:param result: 输出模板'''self.data = dataself.i = i# self.result = resultdef check_items01(self):'''三电数据核对'''if self.data[self.i][11] == '' or self.data[self.i][11] == '0' or self.data[self.i][11] == '0.0':# self.result['01_三电']['总电压'].append(self.data[self.i])print('-----三电总电压异常-----')print(self.data[self.i])else:try:float(self.data[self.i][11])except ValueError:# self.result['01_三电']['总电压'].append(self.data[self.i])print('-----三电总电压异常-----')print(self.data[self.i])if self.data[self.i][13] == '' or self.data[self.i][13] == '0' or self.data[self.i][13] == '0.0':print('-----三电SOC异常-----')print(self.data[self.i])else:try:float(self.data[self.i][13])except ValueError:print('-----三电SOC异常-----')print(self.data[self.i])if self.data[self.i][15] == '' or self.data[self.i][15] == '0' or self.data[self.i][15] == '0.0':print('-----三电绝缘电阻异常-----')print(self.data[self.i])else:try:float(self.data[self.i][15])except ValueError:print('-----三电绝缘电阻异常-----')print(self.data[self.i])if self.data[self.i][29] == '0' or self.data[self.i][29] == '0.0':print('-----三电电机电压异常-----')print(self.data[self.i])elif self.data[self.i][29] == '':if self.data[self.i][6] != '熄火':print('-----三电电机电压异常-----')print(self.data[self.i])else:try:float(self.data[self.i][29])except ValueError:print('-----三电SOC异常-----')print(self.data[self.i])def check_items04(self):'''充电完成  -  SOC=100%'''if self.data[self.i][7] == '充电完成':# if data[i]['充电状态'] == '充电完成':#     if data[i]['SOC-国标'] != '100.0':if self.data[self.i][13] != '100.0':# fail_data['充电完成标志与SOC=100%不一致'].append(data[i])print('-----充电完成标志与SOC=100%不一致-----')print(self.data[self.i])def check_items05(self):"""动力电池总功率大于电机功率"""if self.data[self.i][29] != '' and self.data[self.i][12] != '0' and self.data[self.i][12] != '0.0':try:Mot_u = float(self.data[self.i][29])Bat_u = float(self.data[self.i][11])except ValueError:passelse:if Bat_u <= Mot_u:print('-----电池功率不大于电机功率-----')print(self.data[self.i])def check_items08(self):'''三级故障查看'''if self.data[self.i][53] == '3':print('-----出现三级故障,查看前后30s数据,间隔1s-----')print(self.data[self.i-1])print(self.data[self.i])print(self.data[self.i+1])def check_items26(self):'''最低温度核对,不为0和空'''if self.data[self.i][52] is not None:try:float(self.data[self.i][52])except ValueError:print('-----最低温度异常-----')print(self.data[self.i])if self.data[self.i][52] == 0 or self.data[self.i][52] == '0.0' or self.data[self.i][52] is None:print('-----最低温度异常-----')print(self.data[self.i])def check_items25(self):'''电池最高单体电压不为0和空'''if self.data[self.i][41] is not None:try:float(self.data[self.i][41])except ValueError:print('----- 电池最高单体电压-----')print(self.data[self.i])if self.data[self.i][41] == 0 or self.data[self.i][41] == '0.0' or self.data[self.i][41] is None:print('-----最低温度异常-----')print(self.data[self.i])def check_items28and29(self):# print(type(self.data[self.i][39]))if str(self.data[self.i][47]) != '1':print('-----最高温度子系统号不为1-----')print(self.data[self.i])if str(self.data[self.i][39]) != '1':print('-----最高电池子系统号不为1-----')print(self.data[self.i])def check_items03(self,item03_sort):if self.data[self.i][10] == '0' or self.data[self.i][10] == '0.0' or self.data[self.i][10] is None:print('-----里程存在异常值-----')print(self.data[self.i])else:try:float(self.data[self.i][10])except ValueError:print('-----里程存在异常值-----')print(self.data[self.i])if self.i >= 1:if item03_sort == 'desc':if self.data[self.i-1][10] < self.data[self.i][10]:print('-----里程存在跳变-----')print(self.data[self.i])elif item03_sort == 'asc':if self.data[self.i-1][10] > self.data[self.i][10]:print('-----里程存在跳变-----')print(self.data[self.i])def check_items20(self):"""上传的充电状态为FE,不在[1,4]范围内"""charging_status=['充电完成','停车充电','未充电状态']if self.data[self.i][7] not in charging_status:print('---------车辆状态异常----------')print(self.data[self.i])def check_items21(self):"""上传的车辆状态为异常值FE,数据项里为空或者错误,非1-2-3"""vehicle_status=['熄火','启动状态']if self.data[self.i][6] not in vehicle_status:print('---------车辆状态异常----------')print(self.data[self.i])def check_items22(self):"""多条相同时间报文力里的里程值不一样"""# 查看平台数据,熄火状态下的里程值应该不发生变化(一般看车速)if self.data[self.i][6] == '熄火' :if self.data[self.i][9] != '0.0':print('--------多条相同时间报文里的里程值异常--------')print(self.data[self.i])def check_items24(self):"""通用报警标志数值不等于0最高报警等级不为0和1"""highest_alarm_list = ['0','1']if self.data[self.i][53] not in highest_alarm_list:print('--------最高报警异常--------')print(self.data[self.i])if self.data[self.i][54] != '0':print('--------通用报警异常--------')print(self.data[self.i])def check_items30(self):"""温度极值单体单体序号与温度探针列表的极值序号是否一致"""str=self.data[self.i][46]temp_list=re.findall(r'\d+\.?\d*',str) # 温度del temp_list[0] # 剔除1# print(temp_list)if self.data[self.i][49]!=max(temp_list):print('-----温度极值单体序号与温度值不一致------')print(self.data[self.i])if self.data[self.i][52] != min(temp_list):print('-----温度极值单体序号与温度值不一致------')print(self.data[self.i])def check_items31(self):     """单体电压极值序号与单体电压列表的单体电压极值序号是否一致"""str=self.data[self.i][38]temp_list= list(re.findall(r"\d+\.?\d*",str)) # 单体蓄电池电压值列表# temp_list.remove(1)del temp_list[0]if self.data[self.i][41] != max(temp_list):print('-----单体电压极值序号与单体电压列表的单体电压极值序号不一致------')print(self.data[self.i])if self.data[self.i][44] != min(temp_list):print('-----单体电压极值序号与单体电压列表的单体电压极值序号不一致------')print(self.data[self.i])def check_items32(self):"""驱动有效加速踏板值无效"""# 1.   当挡位为前进挡(自动D挡)或倒挡(R挡)时,如果油门踏板开度值大于零,则驱动力有效。如果油门踏板开度值等于零,则驱动力无效。# 2. 当挡位为空挡时,不管油门踏板开度值为多少,驱动力都为无效。# 3. 在任意挡位下,只要制动踏板开度值大于零或者手刹状态为已激活状态,则驱动力无效,制动力有效。if  self.data[self.i][20] == '有效' :if self.data[self.i][16] == '0' :print('------加速踏板值存在异常值------')print(self.data[self.i])if self.data[self.i][17] != '0':print('------加速踏板值存在异常值------')print(self.data[self.i])

3.CheckTxt.py

from os import name, pathclass Check_logdata():def __init__(self,filename):""":param filename:需要检查的log数据文件地址:param result:输出模板"""self.filename = filenamedef check_items12_15_17(self):gps = 'GPS:02 V'tferr='TF: ERR 5'reset='Reset: 00'wakeup_failed='wake up MPU Failed'f = open(self.filename,'rb')with open(self.filename) as f:count =0for lines in f:count=count+1if gps in lines:print("GPS存储无效\nline:",count, lines)if tferr in lines:print('TF卡存储错误 \nline:',count, lines)if reset in lines:print('出现Reset:00 \nline:',count, lines)if wakeup_failed in lines:print('wake up MPU Failed,\nline: ',count, lines)

4.自动化结果

汽车路试数据分析的脚本相关推荐

  1. 慧数汽车大数据分析:长城控诉吉利“抹黑”,将涉及汽车圈多数人利益

    如果您是汽车圈内人士,针对长城控诉吉利"抹黑"一事,仅仅是抱着看热闹的心态,可能会错过转投高薪岗位.承接优质项目.加盟新网点等历史性机遇,有些车企可能都不知道自己是怎么消失的. 一 ...

  2. 慧数汽车大数据分析:谁压垮了SUV车市?

    目前SUV车市比较疲软,那其究竟有多疲软?哪些细分领域最疲软? 一.2018年SUV由推动车市增长的"功臣"瞬间成为"罪臣" 近十年SUV一直是拉动中国乘用车销 ...

  3. 慧数汽车大数据分析:车市竞争将由打造爆款向构建“产品矩阵”转型

    在车企只要完成年销量三十万辆的目标时,只需认认真真培育出一款爆款车就足够了,如哈弗H6.完成年销量50万辆的目标时,只需认认真真培育出一两款爆款车就足够了,如哈弗H6+哈弗H2.但为什么多数车企在年销 ...

  4. [SQL Server玩转Python] 一.安装环境及T-SQL调用python脚本

    在开发项目过程中,更多的是通过Python访问SQL Server数据库接口,进行数据挖掘的操作:而SQL Server2016版本之后,嵌入了强大的R.Python.Machine Learning ...

  5. 《消费者报告》杂志:Model 3和Model S被评选为美国最佳豪华汽车

    近日,权威杂志<消费者报告>在最新一批最佳美国汽车排行榜中,将Model 3和Model S评选为美国最佳豪华汽车. <消费者报告>综合了汽车路试.可靠性.车主满意度和安全性, ...

  6. 商业智能改变汽车行业

    汽车市场的快速膨胀带动了汽车行业的快速发展,传统的销售和管理模式业已经难以在激烈的市场竞争中拼杀,随着大数据与移动互联技术的普及,传统汽车营销服务方式正在受到有力挑战. <大数据时代>一书 ...

  7. 汽车数据聚类分析——天池竞赛

    天池竞赛汽车数据链接:https://pan.baidu.com/s/126CDXOpFbR-J3ST-U83LZA  提取码:1234 #导入库文件并读取数据 import pandas as pd ...

  8. 【无标题】2022年汽车修理工(高级)考试练习题及在线模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2022年汽车修理工(高级)复训题库为汽车修理工(高级)上岗证题库高频考题覆盖!2022年汽车修理工(高级)考试练习题及在线模拟考试依据汽车修理工(高级) ...

  9. python数据分析岗位_数据分析岗位招聘情况

    本次主要围绕数据分析岗位的招聘情况, 进行一个简单的数据分析 环境 win8, python3.7, pycharm, jupyter notebook 正文 1. 明确分析目的 了解数据分析岗位的最 ...

最新文章

  1. templateref html内容,angular之ng-template模板加载
  2. 宝马无人车体验:把司机彻底干掉,有必要吗?
  3. kong安装配置手册
  4. maven install (window 7)
  5. 什么是 Time to live TTL
  6. 网络动态负载均衡算法分析
  7. 作用于HTML元素的Vue.js指令
  8. git全局配置用户名和密码_git---全局设置用户名、密码、邮箱
  9. 0基础学python做什么工作好-零基础自学python到什么程度才有机会去小公司实习?...
  10. [渝粤教育] 同济大学 线性代数学习指导 参考 资料
  11. 汉斯·乌尔里希·鲁德尔-唯一一个钻石金双剑金橡叶骑士勋章获得者
  12. Java基础资料整理
  13. 越南大老二,游戏规则说明
  14. 冰川时代4中英台词全集
  15. 如何实现 ASP.NET Core WebApi 的版本化
  16. API接口开发其实特简单,Python Flask Web 框架教程来了
  17. Nginx通俗易懂教程
  18. ubuntu java 中文_Ubuntu下 JAVA GUI 程序汉字显示为方框解决办法
  19. prooerties mysql_mysql数据库操作相关知识--读书笔记分享
  20. Android 9 (P)版本解决VNDK library: XXX‘s ABI has EXTENDING CHANGES

热门文章

  1. 【论文精读】Guided-MVS
  2. 搜狗蜘蛛池之搜狗泛站群技巧详解
  3. 快手2020校招笔试题 2019.8.25
  4. 计算机专业英语BD,计算机专业英语
  5. vue移动端表格吸顶、行自适应高度、列左侧固定悬浮
  6. 5V变3.3V好用的电源芯片
  7. NFC无线近场通讯技术
  8. hive 原理 用法,编码,UDF 001
  9. Hadoop ha搭建
  10. 英语影视台词---三、Cinema Paradiso