2

DictWriterは私のために働いていないようです。

現在のコード:

myfile = open('hashdict.csv', 'wb')
fieldnames = ('md5', 'value')
myWriter = csv.DictWriter(myfile, fieldnames=fieldnames)
headers = dict((n,n) for n in fieldnames)
myWriter.writerow(headers)
for n in dictToSearch:
    myWriter.writerow(n)
myfile.close()

トレースバック:

Traceback (most recent call last):
  File "hash.py", line 42, in <module>
    myWriter.writerow(n)
  File "C:\Python27\lib\csv.py", line 148, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
  File "C:\Python27\lib\csv.py", line 144, in _dict_to_list
    ", ".join(wrong_fields))
ValueError: dict contains fields not in fieldnames: d, 1, a, 5, 0, d, 0, a, 1, 7
, 0, e, 5, e, a, 9, f, e, b, 6, f, 7, 9, 6, 1, 3, 6, 3, f, 6, d, 9

英数字はMD5ハッシュからのものですが、それが私が言えることのすべてです。ドキュメントを見ましたが、意味がわからないようです。私がやろうとしているのは、dictToSearchという辞書からCSVファイルを作成することです。

よろしくお願いします。他に情報が必要な場合はお知らせください。

完全なコードへのリンク:http://pastebin.com/A3E4AJfV

4

1 に答える 1

5

ここで欠落している重要な情報:dictToSearchとは何ですか?{'e2fc714c4727ee9395f324cd2e7f331f':'abcd'、 '098f6bcd4621d373cade4e832627b4f6':'test'}のようなものだと思います。

その場合、ここでの問題は、「dictToSearchのnの場合」がnをdictToSearchの最初のキーに設定することです。これはMD5ハッシュになります。次に、writerow(n)は、そのMD5ハッシュ文字列を、文字列としてではなく、1文字のキーと値で構成されるそれ自体が辞書として解釈します。

あなたが本当にやりたいことは次のとおりだと思います。

for key, value in dictToSearch.items():
    myWriter.writerow({'md5' : key, 'value': value})

これは、dictToSearchからのエントリを、使用しているフィールド名に一致する独自の辞書に変換します。

于 2013-02-03T01:36:20.700 に答える