2013-02-09 2 views
12

Я пытаюсь запустить следующий код в Python, и я получаю сообщение об ошибке:Python CSV Ошибка: последовательность ожидается

csv.Error: sequence expected 

Кто-нибудь есть идея, что это случилось с моим кодом? (Файл был ранее импортирован в программу).

import csv 
file = open('/home/btoms/Desktop/TomsBen/2000/01/01/20000101acme.mts', 'r') 

variables = [] 

file.readline() #Skip a line 
file.readline() 
file.readline() #Skip another line 

for line in file: 
    tmp = line.split() 
    tmp_STID = str(tmp[0]) 
    tmp_T = float(tmp[4]) 
    tmp_RH = float(tmp[3]) 
    tmp_Times = float(tmp[2]) 
    variables.append(tmp_STID) 
    variables.append(tmp_Times) 
    variables.append(tmp_T) 
    variables.append(tmp_RH) 


    if tmp_T < 6.2 and tmp_RH > 60.0: 
    dataCSV = open('ProgramCheck.csv', 'w') 
    writer = csv.writer(dataCSV, dialect='excel') 
    writer.writerow(['Station ID', 'Time', 'Temperature' , 'Relative Humidity']) 

    for values in variables: 
     writer.writerow(values) 
    else: 
      pass 
    file.close() 

ошибка появляется как:

Traceback (most recent call last): 
     File "checkcsv.py", line 30, in <module> 
     writer.writerow(values) 
    _csv.Error: sequence expected 
+1

Пожалуйста, разместите полное сообщение об ошибке с полным отслеживанием. – BrenBarn

+1

'else: pass' ничего не делает в вашем коде. Вы имели в виду это сделать что-то еще? –

+0

Предполагается пропустить текущую строку в открывшемся файле и перейти к следующей строке. Наверное, это следующая проблема, с которой я столкнулся! –

ответ

2

Прямо сейчас это выглядит, как вы пытаетесь написать просто строка

writer.writerow(variables) 

запишет весь ряд

tmp_STID = str(tmp[0]) 
    tmp_T = float(tmp[4])  
    tmp_RH = float(tmp[3]) 
    tmp_Times = float(tmp[2]) 

проверить список переменных

[tmp_STID, tmp_T, tmp_RH, tmp_Time] 

также похоже, что вы открываете новый файл csv для каждой итерации? Должно ли это быть вне цикла?

+0

Извините, что - исправлен программный код для включения начальная часть моей программы. Случайно не копировал это в первый раз. –

+0

Да, это должно быть вне цикла ... Большое спасибо за то, что заметили это. –

+0

Я пытаюсь написать STID, T, RH и Times в одной строке, но отдельные столбцы в файле csv. Должен ли этот код работать для этого? –

14

writer.writerow ожидает последовательность (кортеж или список) значений для записи в одной строке с одним значением для каждого столбца в этой строке. То, что вы дали ему, является единственным значением. Ваш код действительно должен выглядеть как:

writer.writerow([tmp_STID, tmp_Times, tmp_T, tmp_RH]) 

и он смотрит на меня, как большая часть этого кода должна быть в большом цикле, который проходит один раз на станцию ​​(и, таким образом, один раз в ряду).


dataCSV = open('ProgramCheck.csv', 'w') 
writer = csv.writer(dataCSV, dialect='excel') 
writer.writerow(['Station ID', 'Time', 'Temperature' , 'Relative Humidity']) 

for line in inputData: 
    tmp = line.split() 

    tmp_STID = str(tmp[0]) 
    tmp_T = float(tmp[4]) 
    tmp_RH = float(tmp[3]) 
    tmp_Times = float(tmp[2]) 

    if tmp_T < 6.2 and tmp_RH > 60.0: 
     writer.writerow([tmp_STID, tmp_Times, tmp_T, tmp_RH]) 

file.close() 
+0

Ahhhh Я вижу !! Это делает БОЛЬШЕ больше смысла. Вся часть «writow» отбрасывала меня, когда я ждал открытия файла csv и имел только один набор данных для каждой строки. Это имеет смысл. Огромное спасибо. –

1

Ну, стараюсь думать о том, что Python ожидать, когда вы пытаетесь использовать «writeROW» метод :) Ввод только одно значение не будет работать, потому что каждое значение будет в другой строке , что, вероятно, не то, что вы пытаетесь сделать. Вместо этого вы можете получить все значения, которые каким-то образом связаны друг с другом в одном наборе.

Например: температура 26C в 16:35 на вокзале в Вашингтоне с влажностью 85%. Это будет представлено как: «Вашингтон», «16:35», 26, 85].

+0

Большое вам спасибо за это объяснение. Я не мог найти какой-либо другой метод .write, который бы просто сделал одно поле данных для каждого столбца и переместился от столбца к столбцу. Ваше объяснение на .writerow очищает это. Я предполагаю с вашим предложенным форматом, что вместо фактических слов и чисел я бы использовал ссылочные переменные? –

Смежные вопросы