2

这是我的全部代码:

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
4

2 回答 2

2

在 Python 中,如果一个函数在没有返回的情况下从末尾落下,则假定它是 return 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")最终会在包含数字的每一行之间写入一个包含换行符的单元格。

于 2012-09-12T21:44:57.183 回答
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.  
于 2012-09-12T21:44:21.860 回答