固定数据的处理,保存查看
import os import subprocess,time from subprocess import * import threading import PySimpleGUI as sg start_time = time.time() file = ['101_1.asc', '222_2.asc', '444_3.asc', '331_4.asc', '101_5.asc', '222_6.asc', '444_7.asc', '331_8.asc', '101_9.asc','222_10.asc'] file1= ['150_1.asc', '270_2.asc', '410_3.asc', '320_4.asc', '150_5.asc', '270_6.asc', '410_7.asc', '320_8.asc', '150_9.asc','270_10.asc'] file2 = ['101_can_1.asc', '222_can_2.asc', '444_can_3.asc', '331_can_4.asc', '101_can_5.asc', '222_can_6.asc', '444_can_7.asc', '331_can_8.asc', '101_can_9.asc','222_can_10.asc'] threads= [] threads1= [] a = [1,1,1,1,1,1,1,1,1,1] def readfile(inputfile): with open(inputfile) as f: lines = f.readlines() return lines def run_filter(commandLine,file): with open(file,'w') as fp: subprocess.run(commandLine, stdout=fp) canfd_filter = ['findstr /irc:"CANFD 1 Rx 101 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 2 Rx 222 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 3 Rx 444 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 4 Rx 331 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 5 Rx 101 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 6 Rx 222 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 7 Rx 444 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 8 Rx 331 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 9 Rx 101 0 0 d 32" Combine_All.asc ', 'findstr /irc:"CANFD 10 Rx 222 0 0 d 32" Combine_All.asc ', ] can_filter = [ 'findstr /irc:"1 101 Rx d 8" Combine_All.asc ', 'findstr /irc:"2 222 Rx d 8" Combine_All.asc ', 'findstr /irc:"3 444 Rx d 8" Combine_All.asc ', 'findstr /irc:"4 331 Rx d 8" Combine_All.asc ', 'findstr /irc:"5 101 Rx d 8" Combine_All.asc ', 'findstr /irc:"6 222 Rx d 8" Combine_All.asc ', 'findstr /irc:"7 444 Rx d 8" Combine_All.asc ', 'findstr /irc:"8 331 Rx d 8" Combine_All.asc ', 'findstr /irc:"9 101 Rx d 8" Combine_All.asc ', 'findstr /irc:"10 222 Rx d 8" Combine_All.asc ' ] can_filter1 = [ 'findstr /irc:"1 150 Rx d 8" Combine_All.asc ', 'findstr /irc:"2 270 Rx d 8" Combine_All.asc ', 'findstr /irc:"3 410 Rx d 8" Combine_All.asc ', 'findstr /irc:"4 320 Rx d 8" Combine_All.asc ', 'findstr /irc:"5 150 Rx d 8" Combine_All.asc ', 'findstr /irc:"6 270 Rx d 8" Combine_All.asc ', 'findstr /irc:"7 410 Rx d 8" Combine_All.asc ', 'findstr /irc:"8 320 Rx d 8" Combine_All.asc ', 'findstr /irc:"9 150 Rx d 8" Combine_All.asc ', 'findstr /irc:"10 270 Rx d 8" Combine_All.asc ' ] def worker_man(canfd_filter,file): for i in range(len(canfd_filter)): t = threading.Thread(target=run_filter, args=(canfd_filter[i],file[i],)) t.start() threads.append(t) return threads threads = worker_man(canfd_filter, file) threads1 = worker_man(can_filter, file2) threads2 = worker_man(can_filter1, file1) for t in threads: t.join() for t1 in threads1: t1.join() for t2 in threads2: t2.join() def datachange_can(string_data): split_line = string_data.strip().split(" ") while '' in split_line: split_line.remove('') temp = split_line[12] + split_line[13] temp1 = int(temp,16) split_line.append(temp) split_line.append(temp1) return split_line def datachange_canfd(string_data): split_line = string_data.strip().split(" ") while '' in split_line: split_line.remove('') temp = split_line[len(split_line)-8 - 2] + split_line[len(split_line)-8 - 1] temp1 = int(temp,16) split_line.append(temp) split_line.append(temp1) return split_line ''' def lossframe(temp): if temp != 1: sum = sum + temp retrun sum ''' def change_svae(data_lines): sum1 = 0; for i in range(len(data_lines)): split_line_is = data_lines[1].strip().split(" ") while '' in split_line_is: split_line_is.remove('') if split_line_is[1] == 'CANFD': split_line = datachange_canfd(data_lines[i]) if i<1: split_line.append('\n') s2 = " ".join(['%s' %id for id in split_line]) data_lines[i] = s2 else: split_line1 =datachange_canfd(data_lines[i-1]) temp = split_line[len(split_line)-1]- int(split_line1[50]) split_line.append(temp) split_line.append('\n') #if (temp > 1) and (sum1>= 0): if (temp != 1) and (temp!= -65535): temp = temp - 1 sum1 = sum1+temp s2 = " ".join(['%s' %id for id in split_line]) data_lines[i] = s2 else: split_line = datachange_can(data_lines[i]) if i<1: split_line.append('\n') s2 = " ".join(['%s' %id for id in split_line]) data_lines[i] = s2 else: split_line1 =datachange_can(data_lines[i-1]) temp = split_line[len(split_line)-1]- int(split_line1[15]) split_line.append(temp) split_line.append('\n') if (temp != 1) and (temp!= -65535): temp = temp - 1 sum1 = sum1+temp s2 = " ".join(['%s' %id for id in split_line]) data_lines[i] = s2 return data_lines,sum1 def csv_file_save(readlines, name): # 读入asc源数据文件 for i in range(1,11): a[i-1] = str(i) + name +'.'+'csv' with open(a[i-1],'w') as fp: readlines[i-1],sum1[i-1]=change_svae(readlines[i-1]) s1 = ''.join(readlines[i-1]) fp.write(s1) fp.close() return readlines,sum1 def long_function(): print('已读取完毕,channel canfd文件总行数为:%d' %len(data_lines[0])) print('已读取完毕,channe2 canfd文件总行数为:%d' %len(data_lines[1])) print('已读取完毕,channe3 canfd文件总行数为:%d' %len(data_lines[2])) print('已读取完毕,channe4 canfd文件总行数为:%d' %len(data_lines[3])) print('已读取完毕,channe5 canfd文件总行数为:%d' %len(data_lines[4])) print('已读取完毕,channe6 canfd文件总行数为:%d' %len(data_lines[5])) print('已读取完毕,channe7 canfd文件总行数为:%d' %len(data_lines[6])) print('已读取完毕,channe8 canfd文件总行数为:%d' %len(data_lines[7])) print('已读取完毕,channe9 canfd文件总行数为:%d' %len(data_lines[8])) print('已读取完毕,channel0 canfd文件总行数为:%d' %len(data_lines[9])) print('已读取完毕,ALL channel canfd文件总行数为:%d' %All_lines) print('已读取完毕,channel can文件总行数为:%d or %d' %(len(data_lines1[0]),len(data_lines2[0]))) print('已读取完毕,channe2 can文件总行数为:%d or %d' %(len(data_lines1[1]),len(data_lines2[1]))) print('已读取完毕,channe3 can文件总行数为:%d or %d' %(len(data_lines1[2]),len(data_lines2[2]))) print('已读取完毕,channe4 can文件总行数为:%d or %d' %(len(data_lines1[3]),len(data_lines2[3]))) print('已读取完毕,channe5 can文件总行数为:%d or %d' %(len(data_lines1[4]),len(data_lines2[4]))) print('已读取完毕,channe6 can文件总行数为:%d or %d' %(len(data_lines1[5]),len(data_lines2[5]))) print('已读取完毕,channe7 can文件总行数为:%d or %d' %(len(data_lines1[6]),len(data_lines2[6]))) print('已读取完毕,channe8 can文件总行数为:%d or %d' %(len(data_lines1[7]),len(data_lines2[7]))) print('已读取完毕,channe9 can文件总行数为:%d or %d' %(len(data_lines1[8]),len(data_lines2[8]))) print('已读取完毕,channel0 can文件总行数为:%d or %d' %(len(data_lines1[9]),len(data_lines2[9]))) print('已读取完毕,ALL channel can文件总行数为:%d or %d' %(All_lines_1,All_lines_2)) print('\n') print("channel 1 canfd lossframe %d " %sum1[0]) print("channel 2 canfd lossframe %d " %sum1[1]) print("channel 3 canfd lossframe %d " %sum1[2]) print("channel 4 canfd lossframe %d " %sum1[3]) print("channel 5 canfd lossframe %d " %sum1[4]) print("channel 6 canfd lossframe %d " %sum1[5]) print("channel 7 canfd lossframe %d " %sum1[6]) print("channel 8 canfd lossframe %d " %sum1[7]) print("channel 9 canfd lossframe %d " %sum1[8]) print("channel 10 canfd lossframe %d " %sum1[9]) print("ALL 10 channel canfd total lossframe %d" %sum_all) print("channel 1 can lossframe %d or %d" %(sum2[0],sum3[0])) print("channel 2 can lossframe %d or %d" %(sum2[1],sum3[1])) print("channel 3 can lossframe %d or %d" %(sum2[2],sum3[2])) print("channel 4 can lossframe %d or %d" %(sum2[3],sum3[3])) print("channel 5 can lossframe %d or %d" %(sum2[4],sum3[4])) print("channel 6 can lossframe %d or %d" %(sum2[5],sum3[5])) print("channel 7 can lossframe %d or %d" %(sum2[6],sum3[6])) print("channel 8 can lossframe %d or %d" %(sum2[7],sum3[7])) print("channel 9 can lossframe %d or %d" %(sum2[8],sum3[8])) print("channel 10 can lossframe %d or %d" %(sum2[9],sum3[9])) print("ALL 10 channel can total lossframe %d or %d" %(sum_all_1,sum_all_2)) print('\n') if((All_lines+sum_all) != 0): print("Frame loss rate is %.6f" %(sum_all/(All_lines+sum_all))) else: print("error"); if((All_lines_1+All_lines_1) != 0): print("Frame loss rate is %.6f" %(sum_all_1/(All_lines_1+All_lines_1))) else: print("error"); if((All_lines_2+sum_all_2) != 0): print("Frame loss rate is %.6f" %(sum_all_2/(All_lines_2+sum_all_2))) else: print("error"); print("数据分割转换成功") print("----程序运行时间%s---" %(time.time()- start_time)) return 0 def result_out(data_lines,sum1): All_lines = 0 sum_all = 0 for i in range(10): All_lines = len(data_lines[i]) + All_lines for i in range(10): sum_all = sum1[i] + sum_all return All_lines,sum_all if __name__ == "__main__": data_lines = [1,1,1,1,1,1,1,1,1,1] data_lines1 = [1,1,1,1,1,1,1,1,1,1] data_lines2 = [1,1,1,1,1,1,1,1,1,1] sum1 = [1,1,1,1,1,1,1,1,1,1] sum2 = [1,1,1,1,1,1,1,1,1,1] sum3 = [1,1,1,1,1,1,1,1,1,1] All_lines = 0 sum_all =0 All_lines_1 =0 sum_all_1 = 0 All_lines_2 =0 sum_all_2 = 0 name1 = 'canfd' name2 = 'can' name3 = 'can1' for i in range(10): data_lines[i] = readfile(file[i]) for i in range(10): data_lines1[i] = readfile(file1[i]) for i in range(10): data_lines2[i] = readfile(file2[i]) data_lines,sum1 = csv_file_save(data_lines,name1); data_lines1,sum2 = csv_file_save(data_lines1,name2); data_lines2,sum3 = csv_file_save(data_lines2,name3); All_lines,sum_all =result_out(data_lines,sum1) All_lines_1,sum_all_1 = result_out(data_lines1,sum2) All_lines_2,sum_all_2 = result_out(data_lines2,sum3) sg.theme('Dark Blue 3') # please make your windows colorful layout = [[sg.Text('All lossframe is :'), sg.Text(size=(50,1), key='-OUTPUT-')], [sg.Output(size=(80, 20))], [sg.Button('Submit'), sg.Button('Exit')]] window = sg.Window('Get filename and Show outputfile lines', layout) while True: event, values = window.read() values = sum_all print(event, values) if event == sg.WIN_CLOSED or event == 'Exit': break window['-OUTPUT-'].update(values) long_function() window.close()
数据分析:特定的数据分析,解析成多个文件,并统计丢帧