这是我的全部代码:

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()在CSV文件中放入1000行,每个行都有自己的ID(第1行(减去标题)将等于1,第2行将= 2,依此类推)。我设法通过使用范围将它们全部放在一行上,但这不是我所需要的。

但是,尝试使用我的函数时,我总是收到错误消息。我不确定它的调用方式是否存在问题,或者函数本身是否存在问题。

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

提前致谢!

编辑:回溯,根据要求:

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

最佳答案

在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")最终在包含数字的每一行之间写入了包含换行符的单元格。

关于python - _csv.Error:需要序列[Python],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12396284/

10-14 18:29