• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

thtrll

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

固定数据的处理,保存查看

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() 
            
 
    

 数据分析:特定的数据分析,解析成多个文件,并统计丢帧

posted on 2021-11-24 13:42  thtrll  阅读(47)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3