武汉光迅科技22校招笔试Python题改进(增加GUI)
基于Python的125温度传感器模块数据处理

原本的基础代码:
blog.csdn.net/weixin_53403301/article/details/120912722?spm=1001.2014.3001.5501
原资源:
download.csdn.net/download/weixin_53403301/33844279

现资源:
download.csdn.net/download/weixin_53403301/35432848

题目要求:

  1. 输入数据: 见附件 <125模块温度查询数据.txt>

    #号开头的是命令, #号的下一行是命令应答内容

  2. 输出结果:提取指定字段的值,输出到文件 <125温度统计.txt>
    即上图中01 f1 字段,对应每条应答消息的倒数第5和第4个字节。
    497
    497
    497
    497

  3. 根据 步骤2的结果数据,并用Python 输出图谱

    直接上代码:

# -*- coding: utf-8 -*-
"""
Created on Fri Oct 22 17:44:48 2021@author: 16016
"""
# Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64 bit (AMD64)] :: Anaconda, Inc. on win32
# matplotlib.__version__ == 2.2.3import matplotlib.pyplot as plt # 调用matplotlib绘图库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 载入字体
plt.rcParams['figure.figsize'] = (10.0, 10.0) # 设置大小 单位英寸
import time # 调用系统时间库
import os # 调用系统控制库
import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import *
import tkinter.messagebox
from PIL import Image, ImageTk
from shutil import copyfiledef removeCharterLine(path1, path2): # 读取温度文档文件 去除#符号 并保存在临时文件中f = open(path1, 'r')f2 = open(path2, 'w')for i in f:if not i.strip().startswith("#"):f2.write(i)f.close()f2.close()def removeBlock(path1,path2): # 读取第一个临时文件 去除空行 并保存在临时文件2中with open(path1,'r',encoding = 'utf-8') as fr,open(path2,'w',encoding = 'utf-8') as fd:for text in fr.readlines():if text.split():fd.write(text)fr.closefd.closedef transData(path1,path2,path3): # 读取 临时文件2 输出温度文档文件和临时文件3# 将临时文件2中的每一行的数据用空格分开 提取第11和12个数据 并将其由字符串类型转为16进制整型 再转换为10进制# 将十进制数据保存在输出温度文档文件中# 将输出温度文档中的数据每一行前面都加上序号 代表第x个数据 保存在临时文件3中 并返回数据总数+1file1 = open(path1,'r')file2 = open(path2,'w')file3 = open(path3,'w')count = int()count = 1for line in file1.readlines():curLine=line.strip().split(" ")    hexData=curLine[11]+curLine[12]decData=int(hexData,16)strData=str(decData)file2.write(strData+"\n")file3.write(str(count)+' '+strData[0]+strData[1]+'.'+strData[2]+"\n")count=count+1file1.closefile2.closefile3.closereturn countdef drawData(path1,i,minTemp,maxTemp): # 读取临时文件3 将每一行用空格分开 xy坐标值对应第0、1数据# 输入参数i表示数据总数(x轴)+1的值# 输出参数minTemp和maxTemp表示最低、最高温度范围 用于调整y轴比例input_txt = path1x = []y = []f = open(input_txt,'r')for line in f:line = line.strip('\n')line = line.split(' ')x.append(float(line[0]))y.append(float(line[1]))if float(line[1]) > maxTemp:print("最高温度设置过低")return 0if float(line[1]) < minTemp:print("最低温度设置过高")return 0f.closej=int(i/4//100*100)k=float((maxTemp-minTemp)/5)plt.plot(x, y, '-',marker=',', markersize = '1')plt.grid() # 显示网格线plt.xticks([0,j,j*2,j*3,j*4,i])plt.yticks([minTemp,minTemp+k,minTemp+2*k,minTemp+3*k,minTemp+4*k,maxTemp])plt.xlabel('x')plt.ylabel("temp")plt.title("temp")plt.tick_params(axis="both")temp_pic="temp("+str(minTemp)+"°C-"+str(maxTemp)+"°C)["+str(time.strftime('%Y-%m-%d %H-%M-%S', time.localtime()))+"].png"plt.savefig(temp_pic)plt.show()return temp_picdef addData(path1,i): #可省略 增加第一行的 0 0数据 和最后一行的2155 100数据fp = open(path1)           #指定文件s = fp.read()                   #将指定文件读入内存fp.close()                      #关闭该文件a = s.split('\n')a.insert(0, '0 0')    #在第 0行插入s = '\n'.join(a)                #用'\n'连接各个元素fp = open(path1, 'w')fp.write(s)fp.close()f=open(path1,"a")f.write(str(i)+' 100') # 将温度值100及其序号写入最后一行f.close()def txt_All(path1,minTemp,maxTemp):filepath1=path1filepath2='./125温度统计.txt'tempfile1='./new1.txt'tempfile2='./new2.txt'tempfile3='./new3.txt'removeCharterLine(filepath1,tempfile1)          # 删除#符号             removeBlock(tempfile1,tempfile2)                # 删除空行os.remove(tempfile1) # 删除临时文档文件Count=transData(tempfile2,filepath2,tempfile3)  # 输出温度数据 给数据增加序号并输出临时文件 获取数据总数+1的值
#    addData(tempfile3,Count) #可省略 增加第一行的 0 0数据 和最后一行的2155 100数据os.remove(tempfile2) # 删除临时文档文件temp_pic=drawData(tempfile3,Count,minTemp,maxTemp) # 画坐标图 输入读取文件 数据总数+1的值 和 最低、最高温度值# 删除临时文档文件os.remove(tempfile3)return temp_picif __name__ == '__main__':  root=Tk()root.title("125模块温度数据处理")mainfram=Frame(root,width=700, height=150)mainfram.grid_propagate(0)mainfram.grid()
#    fram=Frame(mainfram,width=640, height=480)
#    fram.grid_propagate(0)
#    fram.grid()    minTemp = float(0)maxTemp = float(100)e1 = Entry(mainfram)e1.grid(ipadx=200,row=0,column=0)e1.delete(0, END)  # 将输入框里面的内容清空e1.insert(0, '125模块温度查询数据.txt')  e2 = Entry(mainfram)e2.grid(ipadx=200,row=1,column=0)e2.delete(0, END)  # 将输入框里面的内容清空e2.insert(0, '请选择125模块温度查询数据的对应文件')e3 = Entry(mainfram)e3.grid(ipadx=200,row=2,column=0)e3.delete(0, END)  # 将输入框里面的内容清空e3.insert(0, '0')  e4 = Entry(mainfram)e4.grid(ipadx=200,row=3,column=0)e4.delete(0, END)  # 将输入框里面的内容清空e4.insert(0, '100')selectPath=""#    img = Image.open("temp(0°C-100°C).png")
#    tkimg = ImageTk.PhotoImage(image=img)
#    image_ctl = tk.Label(fram, image=tkimg)
#    image_ctl.pack(side=BOTTOM, fill=tk.Y, expand=1)def get_mixTemp():new_mixTemp=float(e3.get())print('最低温度:',new_mixTemp)return new_mixTempdef get_maxTemp():new_maxTemp=float(e4.get())print('最高温度:',new_maxTemp)return new_maxTempdef save_pic_as():global selectPathprint("请选择保存文件的路径,关闭程序后将自动保存在所选目录")selectPath = askdirectory(title="请选择保存文件的路径,关闭程序后自动保存")def save_pic():global selectPathprint("关闭程序后将自动保存在当前目录")selectPath = os.getcwd()def tk_pic_show(temp_pic):global selectPathprint("已保存临时图像文件:"+temp_pic)        top=Toplevel()top.title("125模块温度数据坐标图")picfram=Frame(top,width=720, height=720)picfram.grid_propagate(0)picfram.grid() img = Image.open(temp_pic)tkimg = ImageTk.PhotoImage(image=img)image_ctl = tk.Label(picfram, image=tkimg)image_ctl.pack()button_save=Button(picfram,width=50,text="保存图片",command=save_pic).grid(row=0,column=0)button_save_as=Button(picfram,width=50,text="另存图片",command=save_pic_as).grid(row=0,column=1)        top.mainloop()if selectPath:save_file = selectPath+"/"+temp_picsave_file_list = save_file.split(".png")save_file_name = save_file_list[0]+"SA.png"copyfile(temp_pic, save_file_name)
#            os.system("copy "+temp_pic+" "+selectPath+"/"+temp_pic)print("已保存图像到:"+save_file_name)save_file_name = ""selectPath = ""save_file_list = []save_file = ""if os.path.isfile(temp_pic):os.remove(temp_pic)print("已删除临时图像文件:"+temp_pic)else:selectPath = ""if os.path.isfile(temp_pic):os.remove(temp_pic)print("已删除临时图像文件:"+temp_pic)def filedeal():minTemp = get_mixTemp()maxTemp = get_maxTemp()if minTemp > maxTemp:print("最低温度不得大于最高温度")else:temp_pic=txt_All('125模块温度查询数据.txt',minTemp,maxTemp)e1.delete(0, END)  # 将输入框里面的内容清空e1.insert(0, '125模块温度查询数据.txt')if temp_pic == 0:print("温度设置有误")else:tk_pic_show(temp_pic)def filefound():minTemp = get_mixTemp()maxTemp = get_maxTemp()if minTemp > maxTemp:print("最低温度不得大于最高温度")else:filepath= askopenfilename(title="请选择125模块温度查询数据的对应文件", filetypes=[("文本文件(*.txt)", "*.txt"),("所有文件(*.*)", "*.*")])#        print (filepath)temp_pic=txt_All(filepath,minTemp,maxTemp)e2.delete(0, END)  # 将输入框里面的内容清空e2.insert(0, filepath)if temp_pic == 0:print("温度设置有误")else:tk_pic_show(temp_pic)        button1=Button(mainfram,width=20,text="当前目录下直接处理",command=filedeal).grid(row=0,column=1)button2=Button(mainfram,width=20,text="选择文件处理",command=filefound).grid(row=1,column=1)button3=Button(mainfram,width=20,text="更改坐标图最低温度/°C",command=get_mixTemp).grid(row=2,column=1)button4=Button(mainfram,width=20,text="更改坐标图最高温度/°C",command=get_maxTemp).grid(row=3,column=1)#print (fram.size())root.mainloop()

运行效果:




【优秀课设】武汉光迅科技22校招笔试Python题改进(增加GUI)——基于Python的125温度传感器模块数据处理相关推荐

  1. 武汉光迅科技22校招笔试题(武汉邮科院控股国企上市大厂Python的txt文本处理笔试题)

    武汉光迅科技22校招笔试题(武汉邮科院控股国企上市大厂Python的txt文本处理笔试题) 资源: https://download.csdn.net/download/weixin_53403301 ...

  2. 魔法币 java_网易2018校招笔试编程题-魔法币 java实现

    魔法币 原题 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币. 魔法机器1:如果投 ...

  3. 吉林大学软件学院c++优秀课设资源讲解

    1.介绍 课程设计目的: 1.熟悉利用面向对象的方法以及C++的编程思想来完成系统的设计: 2.锻炼学生在设计的过程中,建立清晰的类层次,应用继承和多态等面向对象的编程思想: 3.通过本课程设计,加深 ...

  4. 【优秀课设】基于Python的百度API的OCR名片识别【含完整API账户】

    基于Python的百度API的OCR名片识别[含完整API账户] API账户:(AK及SK) client_id ='WiXDt5e70NI5w0qSeoUBZClZ' client_secret = ...

  5. 58同城2021校招笔试真题-前端

    58同城2021校招笔试-前端 以下代码输出: console.log([1,2,3,4,5].splice(1,2,3,4,5)); console.log([1,2,3,4,5].slice(1, ...

  6. 阿里2020届校招笔试劝退题——你大爷还是你大爷

    阿里巴巴 2020 届的校招笔试结束了,群里哀声一片,来看这些经历了阿里秋招"洗礼"的小伙伴的真实状态. 下面这些人嘛......就有些偏激了,哈哈哈 先来说一下阿里笔试题构成:1 ...

  7. 2020秋招——XX校招笔试编程题:回文串

    回文串判断&打印给定字符串中的所有回文串 笔试时是纸质的,记错了indexOf()函数和charAt()函数,重大失误emmm,这样逻辑虽然都对了还是要gg,ww,反省中... 回文串:aba ...

  8. 【优秀课设】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别 视频随时标注)

    基于OpenCV的Python人脸识别.检测.框选 (遍历目录下所有照片依次识别 视频随时标注) 移步: https://blog.csdn.net/weixin_53403301/article/d ...

  9. 【优秀课设】基于OpenCV-Python的树莓派人脸识别及89C52单片机控制系统设计(指定照片进行识别、遍历目录下所有照片依次识别)

    基于OpenCV-Python的树莓派人脸识别及89C52单片机控制系统设计 (指定照片进行识别) 参照之前的文章所改进 增加视频随时标注功能 https://blog.csdn.net/weixin ...

最新文章

  1. spring boot项目 中止运行 最常用的几种方法
  2. 多人开源博客系统再搜集
  3. Apache HTTP Server 与 Tomcat 的三种连接方式介绍
  4. 数据库系统的三级模式结构知识笔记
  5. leetcode - Interleaving String
  6. [译] 关于 HTTP/3 的一些心得
  7. 对称矩形C语言,c语言编程求任意对称正定矩阵的逆。
  8. 直插电阻功率和尺寸关系
  9. Unity制作别踩白块儿
  10. 商业模拟游戏:柠檬汁杰克项目
  11. 家乐福联姻微库玩逆袭,移动营销你造吗?
  12. 配流02—DIAL算法(改进)
  13. 超火 3D 照片墙,你学废了吗?
  14. Scapy功能介绍以及应用
  15. 2022春秋杯-被带走的机密文件
  16. 有效市场假说和盲点套利
  17. Qtum量子链与亚马逊AWS中国云服务达成合作
  18. 数字孪生智慧场馆|智慧协同,立体可控,节省方案智能化建设投资
  19. CSS Grid网格布局详解
  20. 源码学习:CUDA samples(持续更新)

热门文章

  1. 机器学习初级项目--房价预测案例
  2. 中文汉字的正则字符编码范围
  3. 停车场停车数据自动导出工具
  4. Java根据txt文件数据得到list_java中如何将一个txt文件中的数字读取到一个ArrayList集合中?...
  5. 相关分析法辨识系统脉冲响应
  6. 计算机网络:分组交换与电路交换的比较
  7. 【Terahertz Imaging Technology】空客集团在太赫兹成像技术上取得重要突破
  8. HSMES系统看板管理——实现生产车间可视化
  9. 关联对象 AssociatedObject 完全解析
  10. 二极管的主要特性总结