【问题标题】:_csv.Error: sequence expected [Python]_csv.Error:预期序列 [Python]
【发布时间】:2012-09-05 22:50:56
【问题描述】:

这是我的全部代码:

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

【问题讨论】:

  • 如果您发布回溯也可能会有所帮助。

标签: python csv


【解决方案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.  

【讨论】:

    【解决方案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") 行最终会在包含数字的每一行之间写入一个包含换行符的单元格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-05
      • 2012-04-22
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多