首页 > 解决方案 > csv 文件不会在 while 循环期间创建,仅在使用 csv.writer 执行之后

问题描述

所以我试图从我的arduino中读取数据,但它似乎只在我的脚本停止执行后才创建文件。通过手动停止它或仅运行整个脚本。

现在我的问题主要是它如何在 while 循环期间创建文件并附加到它。为什么现在不工作?

import csv
import time

while True:
    row = ['1', '2', '3']

    with open('results.csv', 'a') as csvfile:
        csv_writer = csv.writer(csvfile)
        csv_writer.writerow(row)

    time.sleep(1)

上面的代码块可用于重现此行为。我想在使用 while 循环而不是在执行之后创建 results.csv。

标签: pythoncsv

解决方案


with open('results.csv', 'a') as csvfile:
    csv_writer = csv.writer(csvfile)
    csv_writer.writerow(row)

time.sleep(1)

写入行后尝试关闭文件。

这会将所有数据刷新到磁盘。

如果你想在循环期间强制刷新到磁盘,你必须在文件上调用某种类型的刷新方法(不确定这是 Python 中的什么函数,但我认为它是csvfile.flush())。

是有关文件缓冲区和将数据刷新到磁盘的更多信息。

例如,以下代码将在每次迭代中将数据刷新到磁盘,但也会减慢整个过程,因为文件缓冲的所有优点都消失了:

while True:
    row = ['1', '2', '3']

    with open('results.csv', 'a') as csvfile:
        csv_writer = csv.writer(csvfile)
        csv_writer.writerow(row)
        csvfile.flush()

    time.sleep(1)

推荐阅读