_csv.Error:预期顺序[Python]
问题内容:
这是我的全部代码:
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中,如果某个函数没有返回就结束了,则假定它为return
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")
最终在包含数字的每一行之间写入一个包含换行符的单元格。