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報文
浙公網安備 33010602011771號