_csv.Error:序列预期[Python]

时间:2012-09-12 21:14:50

标签: python csv

以下是我的全部代码:

import csv

def numbersOut():
    for i in range (1, 1001):
        out.writerow("%s" % (i+1, ))
        out.writerow("\n")

csvname = raw_input("Enter desired filename: ")
headers = ["ID", "Student", "Grade"]

out = csv.writer(open(csvname + ".csv","w"), delimiter=',', lineterminator='\n', quoting=csv.QUOTE_ALL)
out.writerow(headers)
out.writerow(numbersOut())

引起“序列预期”错误的部分是第14行,即这一部分:out.writerow(numbersOut())

基本上,我要做的是使用函数numbersOut()将1000行放入CSV文件中,每行包含自己的ID(第1行(减号标题)将= 1,第2行将= 2等)。我设法通过使用范围将它们全部放在一行,但这不是我需要的。

但是,在尝试使用我的功能时,我一直收到错误消息。我不确定我是如何调用它或者它是否是函数本身的问题。

有什么想法吗?如果有任何需要澄清的话,请询问;我有一种没有多大意义的习惯。

提前致谢!

编辑:跟踪,按要求:

Traceback (most recent call last):
  File "writer.py", line 14, in <module>
   out.writerow(numbersOut())
_csv.Error: sequence expected

2 个答案:

答案 0 :(得分:2)

在Python中,如果函数在没有返回的情况下结束,则假定它返回None。您的numbersOut()功能不会return。所以,当你写

out.writerow(numbersOut())

你最终打电话给out.writerow(None)。这将为您提供错误,因为None不是序列,而csv模块不知道如何将None写为一行CSV数据。

我认为你最好宣布numbersOutout为参数:

def numbersOut(out):
    for i in range (1, 1001):
        out.writerow("%s" % (i+1, ))
        out.writerow("\n")

然后使用

调用它
numbersOut(out)

我建议另外做一些改变。

如果您只想将一个值写入一行,请替换

        out.writerow("%s" % (i+1, ))

        out.writerow(["%s" % (i+1, )])

(请注意插入的[])。 writerow接受一系列值并将每个值写入单独的逗号分隔单元格。如果传递单个字符串,则会将其解释为字符序列,并且每个字符最终都在其自己的单元格中。

其次,我建议删除行out.writerow("\n")。当您使用writerow写一行时,csv模块将为您输出行尾。您无需手动结束线条。实际上,行out.writerow("\n")最终会在包含数字的每一行之间写一个包含换行符的单元格。

答案 1 :(得分:1)

以下作品:

import csv

def numbersOut():
    for i in range (1, 1001):
        seq=[i,i,i,i]
        out.writerow(seq)
        out.writerow("\n")

csvname = raw_input("Enter desired filename: ")
headers = ["ID", "Student", "Grade"]

out = csv.writer(open(csvname + ".csv","w"), delimiter=',', lineterminator='\n', quoting=csv.QUOTE_ALL)
out.writerow([headers])
out.writerow([numbersOut()]) # writerow() expects a sequence a list or a tuple.