_csv.Error:预期顺序[Python]

发布于 2021-01-29 16:39:00

这是我的全部代码:

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
关注者
0
被浏览
44
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    在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")。当您使用编写一行时writerowcsv模块将为您输出行尾。您无需手动结束行。实际上,该行out.writerow("\n")最终在包含数字的每一行之间写入一个包含换行符的单元格。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看