以下是我的全部代码:
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
答案 0 :(得分:2)
在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")
最终会在包含数字的每一行之间写一个包含换行符的单元格。
答案 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.