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

如何将实时时间戳逐行写入CSV?解决批量写入时间一致问题

问题描述

我编写了一段持续检测指定图片的代码,当检测到图片时,希望将“Duck”与当前datetime写入ducklog.csv文件。代码如下:

import datetime
import csv
import pyautogui
import time

now = datetime.datetime.now()

i = 1

f = open('ducklog.csv', 'a', newline=(''))
tup1 = ('Duck', now)
writer = csv.writer(f)

while i<=5:
    Got_him = pyautogui.locateCenterOnScreen("That Duck.png")
    if Got_him == None:
        print (Got_him)
        continue

    else:
        now = datetime.datetime.now()
        print(Got_him)
        print("OH GOD THERE HE IS")
        print(now)
        writer.writerow(tup1)
        time.sleep(5)
        continue

代码可正常运行,但存在问题:程序结束后才一次性写入所有行,导致所有记录的datetime值完全相同。如何实现逐行迭代写入,使时间戳准确反映图片实际被检测到的时间?

解决方案

你的问题根源有两个:

  • 元组tup1初始化后未更新:循环外定义的tup1只绑定了初始的now值,后续循环里更新now并不会同步修改tup1的内容,导致每次写入的都是同一个旧时间。
  • 文件缓存机制延迟写入:Python文件对象默认启用缓存,数据会暂存缓冲区,直到文件关闭或缓冲区满才批量写入磁盘,所以运行中看不到实时记录。

修正后的代码

import datetime
import csv
import pyautogui
import time

# 用with语句自动管理文件生命周期,避免漏关文件
with open('ducklog.csv', 'a', newline='') as f:
    writer = csv.writer(f)
    i = 1
    while i <= 5:
        Got_him = pyautogui.locateCenterOnScreen("That Duck.png")
        if Got_him is None:
            print(Got_him)
            continue
        else:
            # 每次检测到图片时,生成包含当前时间的新元组
            now = datetime.datetime.now()
            tup1 = ('Duck', now)
            print(Got_him)
            print("OH GOD THERE HE IS")
            print(now)
            writer.writerow(tup1)
            # 强制刷新缓冲区,立即写入磁盘
            f.flush()
            time.sleep(5)
            continue

关键修改说明

  1. 移到循环内更新元组:把tup1的定义放到else分支里,每次检测到图片时都用最新的now生成元组,确保时间戳是检测时刻的真实时间。
  2. 使用with语句:替代手动open/close,自动处理文件关闭,既避免资源泄漏,也能在代码块结束时自动刷新缓存。
  3. 手动调用flush():如果需要在程序运行过程中实时看到写入的记录,调用f.flush()可以强制把缓冲区的数据立刻写入磁盘,避免延迟。

额外提示:Python中判断空值建议用is None而非== None,这是更规范的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:07:42