当前位置: 首页 > news >正文

通过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.dtcms.com/a/348627.html

相关文章:

  • LangChain框架入门19: 构建你的第一个 AI 智能体
  • HTTP报文格式详解:从历史演进到现代Web的通信基石
  • Python-鸭子类型
  • DBeaver连接SQL Server时添加驱动后仍提示找不到驱动的解决方法
  • 校园跑腿小程序源码 _ 跑腿便利店小程序 含搭建教程
  • 小程序全局状态管理:使用MobX进行跨组件数据共享详解(九)
  • c++基础知识入门
  • 【AI智能体】Dify 搭建业务单据差异核对助手实战详解
  • kubernetes中的认证和授权
  • Python 变量 (variables)、对象 (objects) 和引用 (references)
  • 第1章:量子涟漪
  • 双网卡并行访问:解决有线局域网与无线互联网共存时的路由冲突问题
  • 淘宝pc端首页做了哪些性能优化?
  • 大型 C/C++ 项目中 AI 助手(Cursor / Claude Code)日常操作清单与发散思路
  • MYSQL-表的约束(下)
  • 数据建模怎么做?一文讲清数据建模全流程
  • 设备管理与策略
  • UE5.5 C++ 增强输入 快速上手
  • nginx部署goaccess监控
  • JdbcTemplate和MyBatis的区别
  • 《支付回调状态异常的溯源与架构级修复》
  • 学习制作记录(选项UI以及存档系统)8.24
  • KVM虚拟化
  • Vue3 setup代替了vue2的哪些功能
  • 分布式事务的两种解决方案
  • MYSQL(DDL)
  • 前端 vs 后端请求:核心差异与实战对比
  • Qt——网络通信(UDP/TCP/HTTP)
  • 【Unity开发】Unity核心学习(二)
  • PAT 1081 Rational Sum