4、监测数据采集物联网应用开发步骤(4)

news2025/1/22 9:16:21
  1. 监测数据采集物联网应用开发步骤(3)

日志或文本文件读写开发

创建全局变量配置代码com.zxy.common.Com_Para.py全局变量根据需要后续补充。

#! python3
# -*- coding: utf-8 -
'''
Created on 2023年08月28日
@author: zxyong 13738196011
'''
#监测数据采集物联网应用--全局变量
import threading

#程序运行路径
ApplicationPath = ""
#操作系统识别 windows linux
devsys = "linux"
#编码格式
U_CODE = "UTF-8"
#文件夹路径根据windows操作系统或linux操作系统自动区分
zxyPath = "/"

新建日志或文本读写代码com.zxy.adminlog.UsAdmin_Log.py,日志文件命名格式参考“zxyong_20230824_1.log”其中日志文件大小超过1M自动新建日志文件。

#! python3
# -*- coding: utf-8 -
'''
Created on 2023年08月28日
@author: zxyong 13738196011
'''

import os
from com.zxy.common import Com_Para
from com.zxy.common.Com_Fun import Com_Fun

class UsAdmin_Log():    
    attContent = ''
    attFolder = ''
    attTFileName = ''
    attENCODE = ''
    
    def __init__(self,*args):
        self.attENCODE = Com_Para.U_CODE
        if len(args) == 2:
            self.attFolder = args[0] + Com_Para.zxyPath + "log"
            self.attContent = args[1]
        elif len(args) == 3:              
            self.attFolder = args[0] + '/log'
            self.attContent = args[1]
            self.attTFileName = args[2]
        elif len(args) == 4:
            self.attFolder =  args[0] + Com_Para.zxyPath + "data"
            self.attContent = args[1]
       
    def WriteData(self,inputDelay_code):
        self.HadForder()
        self.SaveFileData(inputDelay_code)

    # 编写默认log信息
    def WriteLog(self):
        self.HadForder()
        self.SaveFileDay()

    # 编写默认log信息
    def WriteExceptionLog(self,temClassName,temFunName):
        temIndexS = temClassName.rindex("\\")
        temIndexE = temClassName.rindex(".")
        temClass = temClassName[temIndexS+1:temIndexE]
        
        self.attContent = "==>"+temClass+"."+temFunName+"|\r"+self.attContent
        self.HadForder()
        self.SaveFileDay()
        
    # 编写日志,含内容
    def WriteLogAll(self, inputTContent):
        self.HadForder()
        self.SaveFileDayAll(inputTContent)
    
    # 编写带sub日志,含子文件夹
    def WriteLogSub(self, inputSubFile):
        self.HadForder()
        self.SaveFileDay(inputSubFile)       
            
    # 编写DEC日志
    def WriteLogSubDEC(self):
        self.WriteLogSub()
        self.WriteLogAll('DEC_SEC_')
    
    def InitWriteData(self,inputDelay_code):
        self.HadForder()
        self.InitSaveFileData(inputDelay_code)
    
    def InitSaveFileData(self,inputDelay_code):
        temStrTFileName = self.attFolder + Com_Para.zxyPath + inputDelay_code + ".dat"
        temFile = None
        try: 
            if os.path.exists(temStrTFileName) == False :
                temFile = open(temStrTFileName, 'w',encoding=self.attENCODE)
                temFile.write(self.attContent + "\r\n")
                temFile.close()
            else:
                pass
        except Exception as e:
            print(repr(e)+"=>"+str(e.__traceback__.tb_lineno))
        finally:
            if temFile != None:
                temFile.close()
    
    def InitAppendFileData(self,inputDelay_code):
        temStrTFileName = self.attFolder + Com_Para.zxyPath + inputDelay_code + ".dat"
        temFile = None
        try: 
            if os.path.exists(temStrTFileName) == False :
                temFile = open(temStrTFileName, 'w',encoding=self.attENCODE)
                temFile.write(self.attContent + "\r\n")
                temFile.close()
            else:
                temFile = open(temStrTFileName, 'a',encoding=self.attENCODE)
                temFile.write(self.attContent + "\r\n")
                temFile.close()
        except Exception as e:
            print(repr(e)+"=>"+str(e.__traceback__.tb_lineno))
        finally:
            if temFile != None:
                temFile.close()
                 
    # 判断文件夹是否存在,
    def HadForder(self):
        if os.path.exists(self.attFolder) == False:
            os.mkdir(self.attFolder)
    
    #读取文件内容
    def ReadFileToJson(self,inputFileName):
        temResult = []
        temFile = None
        try: 
            if os.path.exists(inputFileName) == False :
                temResult = []
            else:
                temFile = open(inputFileName, 'r',encoding=self.attENCODE)
                while True:
                    temLines = temFile.readline()
                    if len(temLines) > 0:
                        if temLines[0:1] != ",":
                            temResult.append(temLines)
                        else:
                            temResult.append(temLines[1:len(temLines)])
                    if not temLines:
                        break
                    pass
        except Exception as e:
            temResult = []
            print(repr(e)+"=>"+str(e.__traceback__.tb_lineno))
        finally:
            if temFile != None:
                temFile.close()
        return temResult
    
    #读取文件内容
    def ReadFile(self,inputFileName):
        temStrResult = ''
        temFile = None
        try: 
            if os.path.exists(inputFileName) == False :
                temStrResult = ""
            else:
                temFile = open(inputFileName, 'r',encoding=self.attENCODE)
                while True:
                    temLines = temFile.readline()
                    #整行读取数据
                    temStrResult += temLines
                    if not temLines:
                        break
                    pass
        except Exception as e:
            temStrResult = ""
            print(repr(e)+"=>"+str(e.__traceback__.tb_lineno))
        finally:
            if temFile != None:
                temFile.close()
        return temStrResult

    # 按日保存带内容日志文件
    def SaveFileDayAll(self, inputTContent):
        temStrLogName = ""
        if self.attTFileName == "":
            temStrLogName = self.attFolder + '/zxyong_' + Com_Fun.GetTime('%Y%m%d') + '_1.log'
        else:
            temStrLogName = self.attFolder + '/' + self.attTFileName + '.log'
        
        temFile = None
        try: 
            if os.path.exists(temStrLogName) == False :
                temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                temFile.write(inputTContent + "\r\n")
                temFile.close()
            else:
                temLgSize = os.path.getsize(temStrLogName)
                i = 2
                while 1 == 1:
                    if temLgSize > 1024 * 1024 :
                        if self.attTFileName == "":
                            temStrLogName = self.attFolder + "/zxyong_" + Com_Fun.GetTime('%Y%m%d') + "_" + str(i) + ".log"
                        else:
                            temStrLogName = self.attFolder + "/" + self.attTFileName + Com_Fun.GetTime('%Y%m%d') + "_" + str(i) + ".log"
                        
                        if os.path.exists(temStrLogName) == False :
                            temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                            temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                            temFile.write(inputTContent + "\r\n")
                            temFile.close()
                            break
                        else:
                            temLgSize = os.path.getsize(temStrLogName)
                    else:
                        temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                        temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                        temFile.write(inputTContent + "\r\n")
                        temFile.close()
                        break
                    i = i + 1
        except Exception as e:
            print(repr(e)+"=>"+str(e.__traceback__.tb_lineno))
        finally:
            if temFile != None:
                temFile.close()
    
    # 按日保存带文件名日志文件,按日文件夹存储
    def SaveFileDaySub2(self, inputSub):
        temPath = self.attFolder +"/"+Com_Fun.GetTime("%Y-%m-%d")
        if os.path.exists(temPath) == False:
            os.mkdir(temPath)
        temStrLogName = temPath + '/zxyong_' + inputSub+"_" + Com_Fun.GetTime('%Y%m%d') + '_1.log'
        temFile = None
        try: 
            if os.path.exists(temStrLogName) == False :
                temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                temFile.write(self.attContent + "\r\n")
                temFile.close()
            else:
                temLgSize = os.path.getsize(temStrLogName)
                i = 2
                while 1 == 1:
                    if temLgSize > 1024 * 1024 :
                        temStrLogName = self.attFolder + '/zxyong_' + inputSub+"_" + Com_Fun.GetTime('%Y%m%d') + "_" + str(i) + ".log"           
                        if os.path.exists(temStrLogName) == False :
                            temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                            temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                            temFile.write(self.attContent + "\r\n")
                            temFile.close()
                            break
                        else:
                            temLgSize = os.path.getsize(temStrLogName)
                    else:
                        temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                        temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                        temFile.write(self.attContent + "\r\n")
                        temFile.close()
                        break
                    i = i + 1
        except Exception as e:
            print(repr(e)+"=>"+str(e.__traceback__.tb_lineno))
        finally:
            if temFile != None:
                temFile.close()
                
    # 按日保存带文件名日志文件
    def SaveFileDaySub(self, inputSub):
        temStrLogName = self.attFolder + '/zxyong_' + inputSub+"_" + Com_Fun.GetTime('%Y%m%d') + '_1.log'
        
        temFile = None
        try: 
            if os.path.exists(temStrLogName) == False :
                temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                temFile.write(self.attContent + "\r\n")
                temFile.close()
            else:
                temLgSize = os.path.getsize(temStrLogName)
                i = 2
                while 1 == 1:
                    if temLgSize > 1024 * 1024 :
                        temStrLogName = self.attFolder + '/zxyong_' + inputSub+"_" + Com_Fun.GetTime('%Y%m%d') + "_" + str(i) + ".log"           
                        if os.path.exists(temStrLogName) == False :
                            temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                            temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                            temFile.write(self.attContent + "\r\n")
                            temFile.close()
                            break
                        else:
                            temLgSize = os.path.getsize(temStrLogName)
                    else:
                        temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                        temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r\n")
                        temFile.write(self.attContent + "\r\n")
                        temFile.close()
                        break
                    i = i + 1
        except Exception as e:
            print(repr(e)+"=>"+str(e.__traceback__.tb_lineno))
        finally:
            if temFile != None:
                temFile.close()
    
    # 按日保存日志文件
    def SaveFileDay(self):
        temStrLogName = ""
        if self.attTFileName == "":
            temStrLogName = self.attFolder + '/zxyong_' + Com_Fun.GetTime('%Y%m%d') + '_1.log'
        else:
            temStrLogName = self.attFolder + '/' + self.attTFileName+Com_Fun.GetTime('%Y%m%d') + '_1.log'
        
        temFile = None
        try: 
            if os.path.exists(temStrLogName) == False :
                temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r")
                temFile.write(self.attContent + "\r")
                temFile.close()
            else:
                temLgSize = os.path.getsize(temStrLogName)
                i = 2
                while 1 == 1:
                    if temLgSize > 1024 * 1024 :
                        if self.attTFileName == "":
                            temStrLogName = self.attFolder + "/zxyong_" + Com_Fun.GetTime('%Y%m%d') + "_" + str(i) + ".log"
                        else:
                            temStrLogName = self.attFolder + "/" + self.attTFileName + Com_Fun.GetTime('%Y%m%d') + "_" + str(i) + ".log"
                        
                        if os.path.exists(temStrLogName) == False :
                            temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                            temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r")
                            temFile.write(self.attContent + "\r")
                            temFile.close()
                            break
                        else:
                            temLgSize = os.path.getsize(temStrLogName)
                    else:
                        temFile = open(temStrLogName, 'a',encoding=self.attENCODE)
                        temFile.write("*********" + Com_Fun.GetTime('%Y-%m-%d %H:%M:%S') + "*********" + "\r")
                        temFile.write(self.attContent + "\r")
                        temFile.close()
                        break
                    i = i + 1
        except Exception as e:
            print(repr(e)+"=>"+str(e.__traceback__.tb_lineno))
        finally:
            if temFile != None:
                temFile.close()



日志调用代码MonitorDataCmd.py主文件中编写:

from com.zxy.adminlog.UsAdmin_Log import UsAdmin_Log

if __name__ == '__main__':下编写

        #全局变量参数设置
        Com_Para.ApplicationPath = os.path.abspath(os.path.dirname(__file__))
        if Com_Para.ApplicationPath[len(Com_Para.ApplicationPath) - 1 :len(Com_Para.ApplicationPath)] == "\\" or Com_Para.ApplicationPath[len(Com_Para.ApplicationPath) - 1 :len(Com_Para.ApplicationPath)] == "/":
            Com_Para.ApplicationPath = Com_Para.ApplicationPath[0 :len(Com_Para.ApplicationPath) - 1]
        sysstr = platform.system()
        if sysstr.lower() == "windows":
            Com_Para.devsys = "windows"
            Com_Para.zxyPath = "\\"
        elif sysstr.lower() == "linux":
            Com_Para.devsys = "linux"
            Com_Para.zxyPath = "/"

        temLog = "测试日志,默认日志"+Com_Fun.GetTimeDef()
        temInitLog = ""
        for i in range(1,20):
            temInitLog = temLog
            temLog = temLog +" " +Com_Fun.GetTimeDef()+";\r" + temInitLog
        uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
        uL.WriteLog()
        print("默认日志文件成功,多次执行看看")
        
        temLog = "测试日志,含文件名日志"+Com_Fun.GetTimeDef()
        temInitLog = ""
        for i in range(1,20):
            temInitLog = temLog
            temLog = temLog +" " +Com_Fun.GetTimeDef()+";\r" + temInitLog
        uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
        uL.SaveFileDaySub("exception")
        print("含文件名日志文件成功,多次执行看看")

日志文件效果如图:

  1. 监测数据采集物联网应用开发步骤(5.1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/943032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件名翻译不求人:一键批量翻译,你就是改名专家

文件名翻译不求人:一键批量翻译,你就是改名专家 在日常生活和工作中,我们常常需要处理各种文件,包括文档、图片、视频等。有时候,我们需要对这些文件进行重命名,以便更好地管理和查找。但是,当…

微服务之Nacos

1 版本说明 官网地址: https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 1.1 2021.x 分支 适配 SpringBoot 2.4, Spring Cloud 2021.x 版本及以上的Spring Cloud Alibaba 版本如下表(最新版本用*标记&am…

Android实现监听APP启动、前台和后台

Android 实时监听APP进入前台或后台 前言 在我们开发的过程中,经常会遇到需要我们判断app进入后台,或者切换到前台的情况。比如我们想判断app切换到前台时,显示一个解锁界面,要求用户输入解锁密码才能继续进行操作;我…

pdf怎么转换成jpg图片?这几个方法值得一试

pdf怎么转换成jpg图片?PDF格式的文件在我们的日常生活和工作中十分常见,但有时候我们需要将PDF文件转换成图片格式,以便于在网页上进行展示或者存放到手机相册中。那么,PDF怎么转换成JPG图片呢?下面介绍几种方法。 第一…

Java【手撕滑动窗口】LeetCode 209. “长度最小子数组“, 图文详解思路分析 + 代码

文章目录 前言一、长度最小子数组1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链…

达梦数据配置兼容

修改数据库实例的dm.ini配置文件COMPATIBLE_MODE的值,0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG COMPATIBLE_MODE 4 #Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server,…

如何设置让软件开机自启动

电脑重置,一些软件能正常使用,但是系统开机自启动选项中并没有它,这就很郁闷 有些极简软件没有直接设置开机自启,需要手动设置,所以我们就需要手动去设置一下它。 1、如果你在任务管理器里能找到它,也可以…

怎么把m4a转换成mp3?音频格式转换方法分享

M4A格式音频文件通常比MP3格式音频文件具有更高的音质,因为它使用了先进的编码技术。但是,M4A文件在某些设备上可能无法播放。将M4A文件转换为MP3格式可以增加音频文件的兼容性,并使其可以在更广泛的设备上播放,如移动设备和汽车音…

解决 git clone 时出现Failed to connect to 127.0.0.1 port 1573问题

今天去拉一个仓库代码,往常都是一下就拉下来了,今天却报错,报错信息如下: 原因:这种情况是因为代理在git中配置的,但是本身环境就有SSL协议了,所以取消git的https或者http代理即可 方法如下&…

文件夹无法删除?简单3招,轻松解决问题!

“我电脑里有一个文件夹占用了很大的内存,我想将它删除来释放一些内存,但是根本没法删除,为什么会这样呢?文件夹无法删除应该怎么办呢?” 在日常电脑使用中,有时候会遇到文件夹无法删除的情况,这…

iTween安装

1. 找到Package Manager面板,Packages选择MyAssets-右上角搜索iTween-找到后点DownLoad-点Import 导入 2. 导入后Assets面板结构如下图。 3. 编译器中输入iTween有提示,安装成功。

DataFrame.plot函数详解(六)

DataFrame.plot函数详解(六) 使用subplot()做子图,定位每一个子图,设置数据和图形,理解fig和ax(axs)的意义和作用。 1. subplot() matplotlib.pyplot.subplots(nrows1, ncols1, *, sharexFalse, shareyFalse, squee…

Spring Boot框架以及它的优势

文章目录 介绍1. **简化配置**2. **快速启动**3. **自动配置**4. **集成第三方库和框架**5. **微服务支持**6. **内嵌式数据库支持**7. **健康监控和管理**8. **可插拔的开发工具**9. **丰富的社区和生态系统**10. **良好的测试支持:** 核心特性**1. 依赖注入&#…

解决Python中的循环引用和内存泄漏问题

在Python编程中,循环引用和内存泄漏是两个常见的问题。本文将详细介绍如何识别和解决这些问题,并提供详细的代码示例。 1、什么是循环引用? 循环引用是指两个或多个对象之间相互引用的情况。这种情况可能导致内存泄漏,因为Python…

无涯教程-Android - 环境设置

您可以从Oracle的Java网站下载最新版本的Java JDK-Java SE下载,您将在下载的文件中找到有关安装JDK的说明,按照给定的说明安装和配置安装程序。最后,将PATH和JAVA_HOME环境变量设置为引用包含 java 和 javac 的目录,通常分别是java_install_dir/bin和java_install_d…

QML Book 学习基础3(动画)

目录 主要动画元素 例子: 非线性动画 分组动画 Qt 动画是一种在 Qt 框架下创建交互式和引人入胜的图形用户界面的方法,我们可以认为是对某个基础元素的多个设置 主要动画元素 PropertyAnimation-属性值变化时的动画 NumberA…

Sip分控管理主机 sip协议可视对讲话筒

Sip分控管理主机 sip协议可视对讲话筒 (型号:SV-3280) 产品特点 标准桌面主机,采用8寸高清IPS屏幕,屏幕分辨率1280*800,触摸控制设计,强化铝合金材质; 国产4核嵌入式CPU芯片1G内存,保证系统的整体稳定性&…

IPD集成产品开发进阶:新产品立项CDP流程

目录 前言 立项流程 专栏目录 CSDN学院 作者简介 前言 CDP 流程原本是 IPD 产品开发的前端流程。 之所以拿到《产品经理进阶专栏》中来讲解: 一是因为这个流程承接了市场管理(也就是 MM 流程)和产品开发这两个关键业务流。 这其实就…

《人生苦短,我学Python》——变量 常量 输入输出

今天,我们来学习变量,常量,以及字符串的输入输出。 文章目录 一、变量:二、常量:三、赋值:四、字符串的定义:五、格式化输出:六、转义字符:七、刷题练习:1. 小…

20 - 分页

分页相关方法 # paginate(当前页, 每页显示几条):分页;返回一个对象 pagination 模型类.query.order_by(-模型类.对象).paginate(page2, per_page3) print(pagination.items) # [<Article 2>, <Article 3>] :每页的数据对象 print(pagination.page) # 当前的页…