【问题标题】:Write to python csv in whileloop在while循环中写入python csv
【发布时间】:2014-02-09 11:53:36
【问题描述】:

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

所以目前我有

while true:
    light = ReadChannel(light)
    voltage =  ConvertVoltage(light)
    print(light, voltage)
    time.delay(5)

因此,理想情况下,打印将成为写入命令。 我检查了该站点,但似乎没有任何内容支持 while 循环写入命令(因为它会不断打开和关闭它)。

【问题讨论】:

  • 在这种情况下没关系,但请尝试发布工作代码。 true应该是Truelight的第一次使用是未定义的,time.delay不存在。

标签: python csv export-to-csv


【解决方案1】:

关键是打开文件句柄并在循环之外实例化 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() - 如果您希望在每次迭代时立即将数据写入文件,这是必要的。否则它只会在文件关闭后写入(当您退出 with 块时,即终止脚本)。

【讨论】:

  • 它告诉我Traceback (most recent call last): File "grav.py", line 45, in <module> csv_writer.writerow([light, voltage]) NameError: name 'csv_writer' is not defined
  • 所以我认为该函数中的某些地方出了问题:P
  • 好吧,如果你使用我发布的代码,它就被定义了。所以你一定试过拆开,省略了csv_writer的定义。
  • 我把它展开了一点以适应其余的代码:P 但我认为我没有进一步改变它。 pastebin.com/K19iCrQi
  • 嗯,是的,你做到了。您再次取出processing_loop() 函数的循环,并将其放入主范围。将第 34 - 53 行移动到 processing_loop() 函数中(在 csv_writer 的定义之后),它应该可以工作。
【解决方案2】:

我不明白你说没有东西支持在循环内写是什么意思。这当然是通常的处理方式:在循环外打开文件,在循环内连续写入,然后再关闭。

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

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2016-09-30
    相关资源
    最近更新 更多