这是我的全部代码:
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数据写出。我认为您最好声明
numbersOut
以out
作为参数: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/