固定數據的處理,保存查看
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()
數據分析:特定的數據分析,解析成多個文件,并統計丟幀
浙公網安備 33010602011771號