python - csv.DictWriter -- 类型错误 : __init__() takes at least 3 arguments (4 given)

标签 python csv arguments

我正在尝试将字典列表写入 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/

相关文章:

java - 在并行流式处理之前或期间有效地预处理 CSV 数据

python:在文件中搜索

python - Django 相对 url 和 https

javascript - 合并来自不同 CSV 的对象数组

python - 如何将互斥参数作为变量传递

Python 子进程命令参数

javascript - 参数对象正在将我的数组转换为列表? javascript

python - 原始字符串、Python 和 re,普通字符与特殊字符

python - 错误 5 :Access denied PyTesseract

mysql - 是否可以编写一个 MySQL 查询来使用 CSV 中的标识值删除记录?