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

Python中DictWriter在while循环内无法写入CSV文件问题

问题分析与解决方案

这是个典型的文件缓冲区未及时刷新导致的问题,我来帮你拆解清楚:

为什么带while循环的代码写不出数据?

Python的文件I/O默认使用缓冲机制,数据会先暂存在内存的缓冲区里,只有满足以下条件之一时才会写入磁盘:

  • 缓冲区被填满
  • 文件对象被关闭(比如with代码块结束时会自动执行关闭操作)
  • 手动调用flush()方法强制刷新

你的第一段代码里,while True是无限循环,程序会一直卡在循环体内运行,永远走不到with块的结尾,所以文件不会被自动关闭,缓冲区里的数据也就一直没机会写到磁盘上,导致你打开CSV文件看不到任何内容。

而第二段代码没有循环,执行完所有语句后with块正常结束,文件被自动关闭,这时候缓冲区的所有数据都会被强制写入磁盘,所以你能看到正常的CSV内容。

怎么修复第一段代码?

只需要在每次写入操作后,手动强制刷新缓冲区就行,修改后的代码如下:

import Gvalues
import time  # 别忘了导入time模块,你的代码里用到了time.strftime

with open(r'D:\Projects\log\pode.csv', 'w', newline='') as GValues.csv_file:
    writer1 = csv.DictWriter(GValues.csv_file, fieldnames=GValues.fieldnames)
    writer1.writeheader()
    while True:
        print(time.strftime("%d/%m/%Y %H:%M:%S"))
        GetStats.get_stats_method(GValues.pair_name, GValues.depth_level)
        WriteCsv.write_csv(writer1)
        # 手动刷新缓冲区,把内存里的数据写到磁盘
        GValues.csv_file.flush()
        # 可选:加个sleep避免循环太频繁占用CPU资源
        time.sleep(1)

另外补充两个小细节:

  • 路径字符串最好加r前缀,避免转义字符(比如\p)被错误解析
  • 你的代码里用到了time.strftime,一定要记得导入time模块,不然会触发NameError

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:51:41