我正在尝试将字典列表写入 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()
。
最佳答案
参数的名称是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 不会提示以下错误:
类型错误:DictWriter 收到意外的关键字参数“fieldNames”
因为 csv.DictWriter
恰好有一个 **kwds
参数。您可以在 documentation 中看到它如果你看一下签名:
class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
此参数将接受任意数量的关键字参数。
关于python - csv.DictWriter -- 类型错误 : __init__() takes at least 3 arguments (4 given),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853708/