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
相关产品推荐
相关产品推荐

