PySimpleGUI練習,特定輸入數據的輸出


#!/usr/bin/python3.8
# -*- coding: utf-8 -*-

import os
import PySimpleGUI as sg
import subprocess,time
from subprocess import *
import threading

def GPS_handle(str1):
    str2 = str1[0].split('\"')
    str2[1] = "GPS"
    str3 = '\"'.join(['%s' % id for id in str2])
    str1[0] = str3
    return  str1


    
def run_filter(commandLine):
        with open(file[i],'w') as fp:
            subprocess.run(commandLine, stdout=fp)
            
sg.theme('LightGreen3')      # Add some color to the window

# Very basic window.  Return values using auto numbered keys
layout = [
    [sg.Text('Please enter your data:canid 只允許配置8個通道\n'
             'canid輸入格式(都好隔開):0x101, 0x222, 0x444, 0x331, 0x101, 0x222, 0x444, 0x331\n'
             'CAN_len輸入格式(都好隔開): 8,8,8,8,8,8,8,8       \n'
             'RMU模塊號輸入格式 320002                               \n'
             'RMU模塊通道輸入格式: ,2,3,4,5,6,7,8             \n'
             '注意逗號分隔符的數目不允許超過11個', size=(70,6))],
    [sg.Text('CAN_ids', size=(20, 1)), sg.InputText(key='-CAN_ids-')],
    [sg.Text('CAN_len', size=(20, 1)), sg.InputText(key='-CAN_len-')],
    [sg.Text('RMU_NUM', size=(20, 1)), sg.InputText(key='-RMU_NUM-')],
    [sg.Text('Channel_NUM', size=(20, 1)), sg.InputText(key='-Channel_NUM-')],
    [sg.Submit(), sg.Cancel()]
]

window = sg.Window('過濾輸入的參數', layout)
event, values = window.read()
window.close()

start_time = time.time()
stra = ''
strn = ['', '', '', '', '', '', '', '', '','','','']
file = ['', '', '', '', '', '', '', '', '','','','']
can = ''
can_len = ''
can_id = []
Channel_NUM = ''
threads = []
can = values['-CAN_ids-']
stra = values['-RMU_NUM-']
can_len   = values['-CAN_len-']
Channel_NUM = values['-Channel_NUM-']
sg.popup('You entered', values['-CAN_ids-'],values['-RMU_NUM-'],values['-CAN_len-'],values['-Channel_NUM-'])

if can == '':
    can = '0x101, 0x222, 0x444, 0x331, 0x101, 0x222, 0x444, 0x331,0x101,0x222'
if stra == '':
    stra = '320002'
if can_len == '':
    can_len='8,8,8,8,8,8,8,8,8,8,8,8'
if Channel_NUM == '':
    Channel_NUM = '1,2,3,4,5,6,7,8,9,10,11,1'
sg.popup('設置', can ,can_len,stra,Channel_NUM )

can = can.split(',')
can= can + ['0']*(12-len(can))
can_id= can + ['0']*(12-len(can))
can_id= [int(can_id[i],16) for i in range(len(can_id))]
tuple(can_id )
file = [str(hex(can_id[i]))[2:5] for i in range(len(file))]
file = [file[i] + '_' + str(i + 1) + '.csv' for i in range(len(file))]

can_len = can_len.split(',')
can_len = can_len + ['8']*(12-len(can_len))
Channel_NUM = Channel_NUM.split(',')
Channel_NUM = Channel_NUM + ['1']*(12-len(Channel_NUM))

strn[0] = 'findstr /irc:"8,1,.*,320002,101,1" Combine_All.csv '
strn[1] = 'findstr /irc:"8,2,.*,320002,222,1," Combine_All.csv '
strn[2] = 'findstr /irc:"8,3,.*,320002,444,1," Combine_All.csv '
strn[3] = 'findstr /irc:"8,4,.*,320002,331,1" Combine_All.csv '
strn[4] = 'findstr /irc:"8,5,.*,320002,101,1," Combine_All.csv '
strn[5] = 'findstr /irc:"8,6,.*,320002,222,1" Combine_All.csv '
strn[6] = 'findstr /irc:"8,7,.*,320002,444,1," Combine_All.csv '
strn[7] = 'findstr /irc:"8,8,.*,320002,331,1" Combine_All.csv '
strn[8] = 'findstr /irc:"8,8,.*,320002,101,1" Combine_All.csv '
strn[9] = 'findstr /irc:"8,8,.*,320002,222,1" Combine_All.csv '
strn[10] = 'findstr /irc:"8,8,.*,320002,11,1" Combine_All.csv '
strn[11] = 'findstr /irc:"GPS,1,.*,320002," Combine_All.csv '
strn = [strn[i].split(',') for i in range(len(strn))]

for i in range(len(strn)):
    str1 = strn[i][0].split('\"')
    str1[1] = can_len[i]
    str2 = "\"".join(['%s' % id for id in str1])
    strn[i][0] = str2

for i in range(len(strn)-1):
    strn[i][4] = can_id[i]

for i in range(len(strn)):
    strn[i][1] = Channel_NUM[i]

for i in range(len(strn)):
    strn[i][3] = stra

strn[11] = GPS_handle(strn[11])
strn = [",".join(['%s' % id for id in strn[i]]) for i in range(len(strn))]
file[11] = 'GPS.csv'
print(strn)



# for i in range(len(strn)):
    # os.system(strn[i])
for i in range(len(strn)):
    t = threading.Thread(target=run_filter, args=(strn[i],))
    t.start()
    threads.append(t)
    
for t in threads:
    t.join()

#讀取文件
def readfile(inputfile):
    with open(inputfile) as f:
        lines = f.readlines()
    return lines

#每行最后兩個字節取出並轉換成10進制    
def datachange_can(string_data):
    split_line = string_data.strip().split(",")
    while '' in split_line:
        split_line.remove('')
    data1 =  split_line[len(split_line)-1]  
    temp = data1[(len(data1)-4):len(data1)]
    temp1 = int(temp,16)
    split_line.append(temp)
    split_line.append(temp1)   
    return split_line    
    
  
#丟幀計數
def change_save(data_lines):  
    sum1 = 0;
    s2 = '';
    for i in range(len(data_lines)):
        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 = int(split_line[len(split_line)-1])- int(split_line1[11])
            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 long_function():
    print('已讀取完畢,channel文件的總行數為: %d' %len(data_lines[0]))
    print('已讀取完畢,channe2文件的總行數為:%d' %len(data_lines[1]))
    print('已讀取完畢,channe3文件的總行數為:%d' %len(data_lines[2]))
    print('已讀取完畢,channe4文件的總行數為:%d' %len(data_lines[3]))
    print('已讀取完畢,channe5文件的總行數為:%d' %len(data_lines[4]))
    print('已讀取完畢,channe6文件的總行數為:%d' %len(data_lines[5]))
    print('已讀取完畢,channe7文件的總行數為:%d' %len(data_lines[6]))
    print('已讀取完畢,channe8文件的總行數為:%d' %len(data_lines[7]))
    print('已讀取完畢,channe9文件的總行數為:%d' %len(data_lines[8]))
    print('已讀取完畢,channe10文件的總行數為:%d' %len(data_lines[9]))
    print('已讀取完畢,channe11文件的總行數為:%d' %len(data_lines[10]))
    print('已讀取完畢,ALL channel文件的總行數為:%d' %All_lines)
    print('\n')
    print("channel 1 lossframe %d" %sum1[0])
    print("channel 2 lossframe %d" %sum1[1])
    print("channel 3 lossframe %d" %sum1[2])
    print("channel 4 lossframe %d" %sum1[3])
    print("channel 5 lossframe %d" %sum1[4])
    print("channel 6 lossframe %d" %sum1[5])
    print("channel 7 lossframe %d" %sum1[6])
    print("channel 8 lossframe %d" %sum1[7])  
    print("channel 9 lossframe %d" %sum1[8])
    print("channel 10 lossframe %d" %sum1[9])
    print("channel 11 lossframe %d" %sum1[10])
    print("ALL 10 channel total lossframe %d" %sum_all)
    print('\n')
    if(sum_all/(All_lines+sum_all) == 0):
        print("No response: wrong number fliter")
    else:
        print("Frame loss rate is %.6f" %(sum_all/(All_lines+sum_all)))
    print("數據分割轉換成功")
    print("----程序運行時間%s---" %(time.time()- start_time))
    return 0
    
if __name__ == "__main__":
              
    data_lines = [1,1,1,1,1,1,1,1,1,1,1,1]
    a = [1,1,1,1,1,1,1,1,1,1,1,1]
    sum1 = [1,1,1,1,1,1,1,1,1,1,1,1]
    All_lines = 0
    sum_all = 0
        
    for i in range(11):  
        data_lines[i] = readfile(file[i])
    
    c = 'csv'
    #讀取csv文件
    for i in range(1,12):
        a[i-1] = str(i) + '.'+'csv'
        with open(a[i-1],'w') as fp:
            data_lines[i-1],sum1[i-1]=change_save(data_lines[i-1])
      
            s1 = ''.join(data_lines[i-1])
            fp.write(s1)
            fp.close()
                        
    for i in range(11):    
        All_lines = len(data_lines[i]) + All_lines
        
    for i in range(11):
        sum_all = sum1[i] + sum_all
     
    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() 
            

    

 服務器后台的特定數據的處理:gps,can報文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM