2015-01-09 2 views
1

Я пытаюсь написать список словарей в CSV, и у меня возникают проблемы с инициализацией csv.DictWriter(). У меня есть:csv.DictWriter - TypeError: __init __() принимает не менее 3 аргументов (4 данных)

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 loop У меня был writer.writerows(), который не выводил все dicts в списке. Изменено на writer.writerow().

+0

У меня нет ошибок. Может быть, есть ошибка в остальной части кода из вашего скрипта –

ответ

3

Имя параметра 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'

becau se csv.DictWriter имеет параметр **kwds. Вы можете увидеть его в documentation, если вы посмотрите на подпись:

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

Этот параметр принимает любое число аргументов ключевых слов.

Смежные вопросы