通过python程序将实时监测数据写入excel软件进行保存是常用和非常实用的功能,本文教会大家怎么去搞定此功能

目录

一、功能介绍

二、具体的程序示例

三、实际应用建议


一、功能介绍

本方案的核心功能是持续监听一个数据源(如传感器、API接口、消息队列、其他应用程序等),将获取到的实时数据流以追加的方式写入到Excel文件中。同时,方案会处理文件创建、表头初始化、数据分批写入等细节,确保程序的效率和数据的完整性。

二、具体的程序示例

示例功能
模拟数据源: 创建一个函数来模拟实时监测数据(例如:时间戳、温度、湿度、压力)。

初始化Excel文件: 程序启动时,检查目标Excel文件是否存在。如果不存在,则创建它并写入表头。

定时任务: 每5秒采集一次模拟数据,并将其追加到Excel文件的指定工作表中。

优雅退出: 通过键盘中断(Ctrl+C)可以安全地停止程序。

程序流程图

大家好好看看程序流程图,帮助厘清思路和理解后面的python程序。

以下是具体的python源程序代码,里面有非常详细的注释,可以复制到自己的开发环境里面去运行体验一下。

import pandas as pd
from openpyxl import load_workbook
import time
from datetime import datetime
import os
import scheduleclass RealTimeExcelLogger:def __init__(self, filename='real_time_data.xlsx'):"""初始化实时Excel记录器:param filename: Excel文件名"""self.filename = filenameself.sheet_name = '监测数据'self.headers = ['时间戳', '温度(°C)', '湿度(%RH)', '压力(kPa)']# 初始化文件,如果文件不存在则创建self._init_excel_file()def _init_excel_file(self):"""检查并初始化Excel文件,如果文件不存在则创建它并写入表头"""if not os.path.exists(self.filename):# 创建一个空的DataFrame,只包含表头df = pd.DataFrame(columns=self.headers)# 使用to_excel创建新文件df.to_excel(self.filename, index=False, sheet_name=self.sheet_name)print(f"新建文件并初始化表头: {self.filename}")else:print(f"文件已存在,将追加数据: {self.filename}")def _get_simulated_data(self):"""模拟生成一条实时监测数据(替换此函数以连接真实数据源):return: 一个包含传感器数据的列表,顺序与self.headers一致"""# 模拟数据生成逻辑timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")temperature = round(25 + (5 * (time.time() % 1)), 2)  # 在25°C附近波动humidity = round(50 + (10 * ((time.time() + 1) % 1)), 2)  # 在50%附近波动pressure = round(101.3 + (0.5 * ((time.time() + 2) % 1)), 2)  # 在101.3kPa附近波动return [timestamp, temperature, humidity, pressure]def _save_data_row(self, data_row):"""使用openpyxl将一条数据记录追加到Excel文件中:param data_row: 要写入的数据列表"""# 加载现有工作簿book = load_workbook(self.filename)# 获取活动工作表或指定名称的工作表writer = pd.ExcelWriter(self.filename, engine='openpyxl', mode='a', if_sheet_exists='overlay')writer.book = bookwriter.sheets = {ws.title: ws for ws in book.worksheets}# 获取目标工作表sheet = book[self.sheet_name]# 找到下一个空行next_row = sheet.max_row + 1# 将数据写入对应的单元格for col_num, value in enumerate(data_row, 1):sheet.cell(row=next_row, column=col_num, value=value)# 保存工作簿book.save(self.filename)print(f"数据已保存: {data_row}")def job(self):"""定时执行的任务:获取数据并保存"""print("执行数据采集任务...")data = self._get_simulated_data()self._save_data_row(data)def run(self, interval_seconds=5):"""运行主循环,定时采集数据:param interval_seconds: 采集间隔时间(秒)"""print(f"开始实时监测,每 {interval_seconds} 秒记录一次数据。按 Ctrl+C 停止。")# 使用schedule库进行调度schedule.every(interval_seconds).seconds.do(self.job)try:# 先立即执行一次self.job()while True:schedule.run_pending()time.sleep(1)  # 降低CPU占用except KeyboardInterrupt:print("\n程序被用户中断。")finally:print("数据记录已完成。")# 主程序入口
if __name__ == "__main__":# 创建记录器实例logger = RealTimeExcelLogger('sensor_data.xlsx')# 开始运行,每5秒记录一次logger.run(interval_seconds=5)

以下是运行结果:

这是建立并已经写入的excel文件

三、实际应用建议

  • 批量写入: 在高速数据采集场景(如每秒>10次),频繁打开保存Excel文件会成为性能瓶颈。建议在内存中缓存一定数量的数据(例如一个list存100条),达到阈值后再一次性写入Excel,显著减少I/O操作。

  • 文件分割: 对于长期运行的任务,可以考虑按日期或文件大小自动分割Excel文件,避免单个文件过大导致打开缓慢或损坏。

  • 替代方案 - 数据库: 如果数据量非常大(百万条以上)或需要复杂查询,强烈建议使用数据库(如SQLite, PostgreSQL, InfluxDB)作为主存储,Excel仅用作导出和报表工具。数据库在处理并发写入、查询和数据完整性方面远胜于Excel。

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

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

相关文章

在 Linux 中全局搜索 Word 文档内容的完整指南

文章目录 为什么不能直接使用 grep 搜索 Word 文档? 解决方案:使用 Pandoc 转换后搜索 步骤 1:安装 Pandoc 步骤 2:创建搜索脚本 步骤 3:执行搜索(两者选其一) 一行命令解决方案 高级用法与优化 1. 忽略大小写搜索 2. 显示匹配内容 3. 性能优化 注意事项 结论 在日常工作中…

基于STM32单片机智能农业大棚控制系统-插件款 DIY 设计开源(实物+程序+原理图+其他资料)

目录 一、项目成品展示 二、功能介绍 三、硬件组成 四、PCB展示 五、程序设计 六、资料分享 资料获取 查看主页介绍:兆龙电子单片机设计 一、项目成品展示 项目成品图片展示: 哔哩哔哩视频链接: STM32单片机智能农业大棚控制系统-插件…

如何实现二维CAD与3D建模工程图关联一体化出图 | 中望3D 2026新亮点

本文为CAD芯智库整理,未经允许请勿复制、转载!原文转自:www.xwzsoft.com/h-nd-609.htmlwww.xwzsoft.com/h-nd-609.html许多企业在同时使用二三维CAD软件时,往往因为2D和3D是不同软件商开发,很容易遇到问题:…

深入理解 Roo Code 的自动批准功能

在软件开发过程中,效率与安全往往是两个需要不断平衡的主题。 Roo Code 中一项能够显著提升效率但也需要谨慎使用的功能——自动批准(Auto-Approval)。如果你经常与 AI 助手协作编码,这个功能可能会改变你的工作流,但错…

《一次高并发场景下疑难Bug的深度排查与复盘》

常规Bug如同路上的小石子,弯腰便可清理;但有些隐藏在架构深处、仅在特定场景下爆发的疑难Bug,却像深渊中的暗礁,不仅会让程序骤然停摆,更可能消耗团队数周甚至数月的精力。我曾亲历过这样一场“战役”—一个仅在高并发峰值时段出现、无规律触发系统崩溃的Bug,从最初的毫无…

互联网大厂Java面试实录:Spring Boot与微服务架构解析

第一轮:基础技术栈 面试官: 小C,你能否简要介绍一下Java SE 8中的Lambda表达式? 小C: Lambda表达式就是Java中的匿名函数,可以简化代码,让代码更优雅。我记得它可以用来替代匿名类,特别是在集合操作中很有用…

渗透测试报告编写平台 | 简化和自动化渗透测试报告的生成过程。

工具介绍 这是一个基于 FastAPI 和 Vue.js 的 Web 应用程序&#xff0c;旨在简化和自动化安全测试报告的生成过程。 <AI编写 能用就行> 主要功能 模板管理: 上传和管理 .docx 格式的报告模板。报告生命周期管理: 创建、编辑、查看和删除安全测试报告。漏洞知识库: 管理和…

Vulkan 学习路线图

按阶段拆解&#xff0c;告诉你每个阶段要写哪些 Demo&#xff0c;逐步从三角形走到完整渲染器。&#x1f539; 第一阶段&#xff1a;入门&#xff08;Hello Vulkan&#xff09;目标&#xff1a;跑通 Vulkan 的最小化程序&#xff0c;理解基本对象。 要做的 Demo&#xff1a;创建…

C语言指针5

文章目录1.sizeof和strlen对比1.1sizeof1.2strlen1.3sizeof和strlen的对比2.数组和指针的笔试题2.1一维数组2.2字符数组2.3二维数组3.指针运算笔试题1.sizeof和strlen对比 1.1sizeof 在学习操作符的时候&#xff0c;我们学习了 sizeof。sizeof 用于计算变量所占内存空间的大小…

【二叉树 - LeetCode】617. 合并二叉树

题目&#xff1a; 617. 合并二叉树 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(n…

AI + 医疗:除了影像诊断,智能技术还在改写哪些诊疗环节?

一、引言在科技飞速发展的当下&#xff0c;人工智能&#xff08;AI&#xff09;已成为医疗领域变革的重要驱动力。提及 AI 在医疗中的应用&#xff0c;大众首先想到的往往是医学影像诊断&#xff0c;AI 的确在该领域成果斐然&#xff0c;如快速识别肺结节、精准分析影像细节&am…

立轴式小型混凝土搅拌机的设计含14张CAD

摘要 目前&#xff0c;混凝土搅拌机在国内外都有着飞速的发展&#xff0c;国际竞争力在不断提高。 为了满足市场需求&#xff0c;完善产品系列&#xff0c;适应小型建筑施工和实验室工作的需求&#xff0c;设 计了此混凝土搅拌机。 本课题主要研究立轴式混凝土搅拌机的工作原理…

深度剖析Spring AI源码(七):化繁为简,Spring Boot自动配置的实现之秘

深度剖析Spring AI源码&#xff08;七&#xff09;&#xff1a;化繁为简&#xff0c;Spring Boot自动配置的实现之秘“Any sufficiently advanced technology is indistinguishable from magic.” —— Arthur C. Clarke Spring Boot的自动配置就是这样的"魔法"。只需…

PNP机器人介绍:全球知名具身智能/AI机器人实验室介绍之多伦多大学机器人研究所

PNP机器人介绍&#xff1a;全球知名具身智能/AI机器人实验室介绍之多伦多大学机器人研究所1&#xff0c;多伦多大学机器人研究所介绍多伦多大学机器人研究所&#xff08;University of Toronto Robotics Institute, 简称UTRI&#xff09;是加拿大规模最大、跨学科最多样化的机器…

计算机网络-1——第一阶段

文章目录一、网络结构体系1.1 OSI七层模型&#xff08;理论标准&#xff09;2. TCP/IP 四层模型&#xff08;实际应用&#xff09;二、计算机网络设备三、网络的分类及IP地址介绍3.1 网络分类3.2 IP地址介绍四、常见协议4.1 TCP协议与UDP协议4.1.1 TCP协议4.1.2 UDP协议4.1.3 T…

数据结构青铜到王者第三话---ArrayList与顺序表(2)

续接上一话&#xff1a; 目录 一、ArrayList的使用&#xff08;续&#xff09; 1、ArrayList的扩容机制&#xff08;续&#xff09; 五、ArrayList的相关练习 1、杨辉三角 2、简单的洗牌算法 六、ArrayList的问题及思考 一、ArrayList的使用&#xff08;续&#xff09; …

[Vid-LLM] docs | 视频理解任务

链接&#xff1a;https://github.com/yunlong10/Awesome-LLMs-for-Video-Understanding docs&#xff1a;Vid-LLM 本项目是关于视频大语言模型(Vid-LLMs)的全面综述与精选列表。 探讨了这些智能系统如何处理和理解视频内容&#xff0c;详细介绍了它们多样的架构与训练方法、旨…

构建高可用Agent状态管理API:Gin+GORM全流程解析

继写给 Javaer 看的 Go Gin 教程 之后新写一篇真实的go开发教程:技术栈​&#xff1a;Go 1.21 Gin 1.9 GORM 2.0 MySQL 5.7 Docker一、技术选型&#xff1a;为什么是GinGORM&#xff1f;1.​性能与简洁性平衡​•​Gin​&#xff1a;基于httprouter的高性能框架&#xff0c…

[Java恶补day51] 46. 全排列

给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&#xff1a;nums …

《李沐读论文》系列笔记:论文读写与研究方法【更新中】

一、如何读论文读三遍&#xff1a;1. 第一遍读完标题和摘要后&#xff0c;直接跳到结论&#xff0c;这几个部分读完就大概知道文章在讲什么东西了&#xff0c;之后还可以看一下正文中的图表&#xff0c;判断一下这篇文章是否适合自己&#xff0c;是否要继续读&#xff1b;2. 第…