通過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
英文地址,請注明出處:http://en.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. 第…