在whileloop中写入python csv

在whileloop中写入python csv,python,csv,export-to-csv,Python,Csv,Export To Csv,我试图用python记录一些数据,我希望它在每次迭代时将一个数据点保存到一个文本文件中 所以现在我有 while true: light = ReadChannel(light) voltage = ConvertVoltage(light) print(light, voltage) time.delay(5) 因此,理想情况下,打印将成为写入命令。 我检查过该站点,但似乎没有任何东西支持while循环写入命令(因为它会不断地打开和关闭)。我不知道你所说的没

我试图用python记录一些数据,我希望它在每次迭代时将一个数据点保存到一个文本文件中

所以现在我有

while true:
    light = ReadChannel(light)
    voltage =  ConvertVoltage(light)
    print(light, voltage)
    time.delay(5)
因此,理想情况下,打印将成为写入命令。
我检查过该站点,但似乎没有任何东西支持while循环写入命令(因为它会不断地打开和关闭)。

我不知道你所说的没有东西支持在循环内写入是什么意思。这当然是通常的做法:在循环外打开文件,在循环内连续写入,然后关闭

with open('myfile.csv', 'w') as f
    writer = csv.writer(f)
    while True:
        light = whatever
        voltage = whatever
        writer.writerow([light, voltage])

关键是打开文件句柄并在循环外部实例化CSV编写器,但在循环内部写入:

import csv
import time

HEADER = ['LIGHT', 'VOLTAGE']

# ...


def processing_loop(csvfile):
    csv_writer = csv.writer(csvfile)
    csv_writer.writerow(HEADER)

    # ...
    while True:
        light = ReadChannel(light)
        voltage =  ConvertVoltage(light)
        csv_writer.writerow([light, voltage])
        csvfile.flush()
        time.sleep(5)


with open('results.csv', 'w') as csvfile:
    processing_loop(csvfile)
为了便于阅读,我将循环分解成它自己的函数,该函数接受一个参数,一个打开的文件句柄,它可以用来创建CSV编写器


还要注意
csvfile.flush()
-如果您希望在每次迭代时立即将数据写入文件,则这是必需的。否则,仅在文件关闭后(当您退出带有块的
时,即终止脚本)才会写入该文件。

在这种情况下,这无关紧要,但请尝试发布工作代码
true
应该是
true
light
的第一次使用未定义,
time.delay
不存在。它告诉我
回溯(最后一次调用):csv_writer.writerow([light,voltage])中第45行的文件“grav.pyNameError:name'csv_writer'未定义
,因此该函数中出现了一些错误我认为:PWell,如果您使用我发布的代码,它已定义。所以你一定试着把它拆开,省略了
csv\u writer
的定义。我把它展开了一点,以适应代码的其余部分:P但我不认为我进一步修改了它。嗯,是的。您再次取出
processing\u loop()
函数的循环,并将其放入主作用域。将第34-53行移动到
处理循环()
函数中(在定义了
csv\u writer
之后),它应该可以工作。