2014-02-09 7 views
-2

Я пытаюсь записать некоторые данные с помощью python, и я хочу, чтобы он сохранял datapoint в текстовый файл на каждой итерации.Пишите на python csv in whileloop

Так в настоящее время у меня есть

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

Так печатающая идеале стать командой записи. Я проверил сайт, но ничто, кажется, не поддерживает команду записи цикла 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

Он говорит мне 'Traceback (самый последний вызов последнего): Файл "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]) 
Смежные вопросы