【问题标题】:Python CSV Error: sequence expectedPython CSV 错误:预期序列
【发布时间】:2013-02-09 02:33:20
【问题描述】:

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

【问题讨论】:

  • 请发布完整的错误信息和完整的回溯。
  • else: pass 在您的代码中不执行任何操作。你的意思是做别的事吗?
  • 它应该跳过打开文件中的当前行并转到下一行。我想这就是我要遇到的下一个问题!
  • 你是在把这条线写到你的 csv 文件吗?
  • 是的,我正在尝试从“变量”列表中获取每个索引项并将它们写入 csv 文件。查看编辑 - 我刚刚添加了我第一次没有粘贴的程序的第一部分。

标签: python csv


【解决方案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()

【讨论】:

  • 啊啊啊我明白了!!这更有意义。整个“writerow”部分让我失望,因为我正在等待打开 csv 文件并且每行只有一个数据集。这是完全有道理的。非常感谢。
【解决方案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 文件?是不是应该被排除在外?

【讨论】:

  • 对此感到抱歉 - 修复了程序代码以包含我程序的初始部分。不小心第一次没有复制。
  • 是的,这应该不在循环中......也非常感谢您注意到这一点。
  • 我正在尝试将 STID、T、RH 和 Times 写入同一行,但在 csv 文件中将列分开。该代码不应该为此工作吗?
  • 是的,请查看文档,并尝试几次,列表中的每个项目将被写入单独的列
  • 我现在明白了!但是,当我拉取打开 csv 文件的代码部分时,程序运行但不会将任何内容传输到 csv 文件。我在底部的 if 语句中有以下内容: writer.writerow([tmp_STID, tmp_Times, tmp_T, tmp_RH])
【解决方案3】:

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

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

【讨论】:

  • 非常感谢您的解释。我找不到任何其他 .write 方法,它只会每列执行一个数据字段并从列移动到列。您对 .writerow 的解释清楚地说明了这一点。我假设使用您建议的格式,而不是实际的单词和数字,我会使用参考变量?
猜你喜欢
  • 2012-04-22
  • 2014-05-13
  • 1970-01-01
  • 2014-09-05
  • 2011-02-08
  • 2012-09-05
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多