2014-02-09 66 views
-2

我試圖用python記錄一些數據,我希望它在每次迭代中將一個數據點保存到文本文件中。在while循環中寫入python csv

所以目前我有

​​

所以打印將理想變成了寫命令。 我檢查過這個網站,但似乎沒有支持while循環寫入命令(因爲它不斷地打開和關閉它)。

+1

這種情況並不重要,但請嘗試發佈*工作*代碼。 'true'應該是'True','light'的第一次使用是未定義的,'time.delay'不存在。 –

回答

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塊時,即終止腳本)。

+0

它告訴我'回溯(最近最後一次通話): 文件 「grav.py」 45行,在 csv_writer.writerow([輕,電壓]) NameError:名字 'csv_writer' 沒有定義 ' – Coolcrab

+0

所以,在這個功能的東西出錯了,我認爲:P – Coolcrab

+0

好吧,如果您使用我發佈的代碼,它的定義。所以你一定試圖把它分開,並省略'csv_writer'的定義。 –

0

我不知道你的意思是說什麼都不支持在循環內寫入。這當然是通常的做法:你在循環外部打開文件,在循環內連續寫入文件,然後關閉它。

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