python实时接收下位机并创建文件保存,通过按键保存结束

**

python接收下位机数据并实时创建文件保存,通过键盘按键保存结束。

**
代码:

	from multiprocessing import Process, Queue
import keyboard, csv, serial, os
import numpy as np




def deal_with_csv_file(file_path='save_csv.csv', csv_head=[], mode='new'):
    '''
    csv文件预处理
    file_path:文件保存的路径
    mode两种模式:
    'new'删除原同名文件(如果有)并新建文件
    'add'在原文件后续写
    csv_head是以列表形式给出的csv文件每列标题,只有在'new'模式才有用
    '''

    def create_csv(csv_head=[], path='save_csv.csv'):
        '''
        新建csv文件
        '''
        with open(path, 'w', newline='') as f:
            csv_write = csv.writer(f)
            if csv_head!=[]:
                csv_write.writerow(csv_head)

    if mode=='new': #新建模式
        if os.path.isfile(file_path):
            os.remove(file_path)
        create_csv(csv_head, file_path)
    elif mode=='add':   #续写模式
        if os.path.isfile(file_path)==False:
            print('源文件缺失,自动新建')
            create_csv(csv_head, file_path)




def serial_to_csv(q):
    '''
    第一进程,从串口保存数据到csv文件
    '''

    #初始设置
    file_path = 'data_save/12.8_1.csv'  #保存文件名称
    csv_head =  ['x','y'] #数据含义
    mode = 'new'    #新建文件还是在原有文件上续写
    # mode = 'add'
    ser = serial.Serial('COM8', baudrate=115200)    #串口信息(名称,波特率)
    ser_msg = ['\r\n$', '#', ',']   #串口符号规定,若有换行则需在原有开始符前加\r\n
    show = True #是否实时展示数据

    #csv文件预处理
    deal_with_csv_file(file_path, csv_head, mode)
    
    #开始读数并保存
    with open(file_path,'a+', newline='') as f:  #'+': 表示文件可以同时进行读取和写入。在追加模式下a,可以通过 'a+' 同时进行文件的读取和追加写入。
        csv_write = csv.writer(f)
        n = 0
        while q.empty():
            num_list=[1,2]

            csv_write.writerow(num_list)
            if show:
                print('\r', num_list, end='')
            n = n+1
        print('\n总共保存了', n-1, '个数据')

def key_board_listen(q):
    '''
    第二进程,键盘监听充当中断函数
    '''

    keyboard.wait('esc')
    q.put(1)


if __name__ == "__main__":
    '''
    从串口保存数据到csv文件,具体参数设置在serial_to_csv中。
    按下esc停止保存,程序退出
    '''

    q = Queue()
    p1 = Process(target=serial_to_csv, args=(q,))
    p2 = Process(target=key_board_listen, args=(q,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

你可能感兴趣的:(python,开发语言)