5

csvモジュール(Python 2.7)でDictWriterを把握するのに問題があります。私はこれを持っています(ああ、問題があることを読んだので、unicodecsvライブラリを使用しています):

f = object_instance.return_a_dictionary.keys()
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = unicodecsv.DictWriter(csvfile, fieldnames=f)
    spamwriter.writerows(object_instance.return_a_dictionary)

したがって、オブジェクトインスタンスを渡します。fは:

[u'n6s2f0e1', u'n1s0f0e0', u'n2s0f0e1', u'n3s1f0e0', u'n5s2f0e0', u'n4s1f0e1']

object_instance.return_a_dictionaryは次のとおりです。

{u'n6s2f0e1': u'stuff', u'n1s0f0e0': u'stuff', u'n2s0f0e1': u'stuff', u'n3s1f0e0': u'stuff', u'n5s2f0e0': u'stuff', u'n4s1f0e1': u'stuff'}

だから本当に私は最初の行が欲しいです:

stuff stuff stuff stuff stuff

writerowが提供された辞書を調べ、提供されたdictwriterフィールド名を使用して提供されたdictのキー名を呼び出し、値を出力するという印象を受けています。

代わりに私は得る:

Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "/usr/lib/python2.7/csv.py", line 153, in writerows
rows.append(self._dict_to_list(rowdict))
>>> File "/usr/lib/python2.7/csv.py", line 144, in _dict_to_list
", ".join(wrong_fields))
ValueError: dict contains fields not in fieldnames: n, 6, s, 2, f, 0, e, 1

私はこの時点でこれを理解していません。これは、通常のPythoncsvライブラリと私が見つけたUnicodecsvライブラリの両方で行われます。誰かが問題が何であるかを説明できますか?

4

1 に答える 1

14

あなたはしたくwriterowないwriterows

前者は、書き込まれる行である単一の引数を取ります。後者は反復可能な行を取ります。ディクショナリを使用して呼び出しwriterowsています。ディクショナリは、ディクショナリを反復処理して各エントリを書き込もうとします。writerow(n6s2f0e1)dictを反復処理するとキーが得られるため、これは、表示されるエラーで(明らかに)失敗する呼び出しと同じです。

于 2012-11-13T19:56:47.113 に答える