You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Matplotlib绘制Python循环处理实时CSV文件的结果

实时绘制CSV新增数据的解决方案

看起来你正在尝试实时绘制每秒新增一行的CSV数据,我帮你完善代码并优化了数据处理逻辑,让整个流程更可靠、更易维护:

完整实现代码

import csv
import matplotlib.pyplot as plt
import time

# 开启matplotlib交互模式,支持实时更新图表
plt.ion()

# 初始化存储时间序列和数值的列表
time_stamps = []
measurements = []

# 打开目标CSV文件
with open(r'c:\temp\samples.csv', 'r') as entrada:
    # 使用csv读取器自动处理引号、分隔符,比手动字符串切片更鲁棒
    csv_reader = csv.reader(entrada)
    # 记录当前文件读取位置,用于后续只读取新增内容
    last_read_position = entrada.tell()
    
    # 持续监听文件新增内容
    while True:
        # 回到上次读取的位置,避免重复处理旧数据
        entrada.seek(last_read_position)
        
        # 读取所有新增行
        for row in csv_reader:
            if row:  # 跳过可能存在的空行
                # 解析时间戳和数值(自动处理引号)
                timestamp = row[0]
                value = float(row[1])
                time_stamps.append(timestamp)
                measurements.append(value)
        
        # 更新读取位置,下次只处理新内容
        last_read_position = entrada.tell()
        
        # 绘制/更新图表
        plt.clf()  # 清除旧图表内容
        plt.plot(time_stamps, measurements, marker='.', linestyle='-', color='#1f77b4')
        plt.xlabel('Timestamp')
        plt.ylabel('Measurement Value')
        plt.title('Real-Time CSV Data Plot')
        # 旋转x轴标签避免重叠
        plt.xticks(rotation=45, ha='right')
        plt.tight_layout()  # 自动调整布局适配标签
        
        # 刷新图表显示
        plt.draw()
        plt.pause(0.1)
        
        # 匹配文件每秒新增一行的频率,减少不必要的循环
        time.sleep(1)

关键优化说明

  • 用csv.reader替代手动字符串处理:你原代码里的切片方式依赖固定字符串长度,一旦时间格式有微小变化(比如毫秒位数改变)就会出错,csv.reader会自动处理引号和分隔符,更可靠。
  • 实时读取新增内容:通过file.seek()记录上次读取位置,避免每次循环都从头读取整个文件,效率更高。
  • 交互模式绘图:plt.ion()开启交互模式,让图表可以实时更新而不阻塞程序运行。
  • 可选:限制显示数据量:如果数据积累太多导致图表拥挤,可以在添加数据后加入以下代码,只保留最近50个数据点:
    if len(time_stamps) > 50:
        time_stamps.pop(0)
        measurements.pop(0)
    

内容的提问来源于stack exchange,提问作者John_Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:32:50