16

我正在尝试在 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
4

3 回答 3

17

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()
于 2013-02-09T02:49:00.333 回答
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 文件?那应该不在循环中吗?

于 2013-02-09T02:43:22.860 回答
1

好吧,当你尝试使用“writeROW”方法时,试着想想 Python 的期望:) 只输入一个值是行不通的,因为每个值都在不同的行中,这可能不是你想要做的。相反,您可能会在一组中获得所有相互关联的值。

例如:华盛顿火车站 16:35 的温度为 26C,湿度为 85%。这将表示为:["Washington", "16:35", 26, 85]。

于 2013-02-09T02:49:34.953 回答