【问题标题】:csv.DictWriter -- TypeError: __init__() takes at least 3 arguments (4 given)csv.DictWriter -- TypeError: __init__() 至少需要 3 个参数(给定 4 个)
【发布时间】:2015-01-09 04:13:03
【问题描述】:

我正在尝试将字典列表写入 CSV,但在初始化 csv.DictWriter() 时遇到问题。我有:

fname = "Machine Detection Rate.csv"
with open(fname, "wb") as f:
    fieldNames = ["Number of Packets", "Number of Machines"]
    writer = csv.DictWriter(f, fieldNames=fieldNames, restval="", dialect="excel",)
    writer.writeheader()
    for line in machineCounter:
        print "Got Here!"
        writer.writerow(line)

我得到的错误是:

TypeError: __init__() takes at least 3 arguments (4 given)

我尝试了各种参数排列,但似乎无法让它运行。我似乎也找不到其他有问题的人。我没有尝试指定的唯一参数是*args**kwds。我仍然是个菜鸟,尽管阅读过,但我不明白他们在这种情况下是如何工作的。有什么想法吗?

编辑:在最后的for 循环中,我有writer.writerows(),它没有输出列表中的所有字典。改为writer.writerow()

【问题讨论】:

  • 我没有收到任何错误。您的脚本中的其余代码可能存在错误

标签: python csv arguments


【解决方案1】:

参数名称是fieldnames(全小写),不是fieldNames

writer = csv.DictWriter(f, fieldnames=fieldNames, restval="", dialect="excel",)

演示:

>>> import csv
>>>
>>> with open('test.csv') as f:
...     fieldnames = ["Number of Packets", "Number of Machines"]
...     writer = csv.DictWriter(f, fieldNames=fieldnames, restval="", dialect="excel",)
...
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: __init__() takes at least 3 arguments (4 given)
>>>
>>> with open('test.csv') as f:
...     fieldNames = ["Number of Packets", "Number of Machines"]
...     writer = csv.DictWriter(f, fieldnames=fieldNames, restval="", dialect="excel",)
...
>>> writer
<csv.DictWriter instance at 0x01AD8E90>
>>>

请注意,Python 不会抱怨以下错误:

TypeError: DictWriter got an unexpected keyword argument 'fieldNames'

因为csv.DictWriter 恰好有一个**kwds 参数。如果你看签名,你可以在documentation看到它:

class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

此参数将接受任意数量的关键字参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多