Подтвердить что ты не робот

Ошибка CSV Python: ожидаемая последовательность

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

 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
4b9b3361

Ответ 1

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()

Ответ 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 для каждой итерации? Должно ли это быть вне цикла?

Ответ 3

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

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