通过DictWriter将字典写入CSV文件(Python)

2 投票
1 回答
7293 浏览
提问于 2025-04-17 14:34

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

1 个回答

5

这里缺少的关键信息是:dictToSearch到底是什么?我猜它可能是像这样的一个字典:{'e2fc714c4727ee9395f324cd2e7f331f': 'abcd', '098f6bcd4621d373cade4e832627b4f6': 'test'}。

如果是这样的话,问题在于“for n in dictToSearch”这行代码会把n设置为dictToSearch的第一个键,也就是一个MD5哈希值。接着,writerow(n)会把这个MD5哈希字符串当成一个字典来处理,而这个字典的键和值都是单个字符,而不是把它当成一个字符串。

我怀疑你真正想做的是:

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

这段代码会把dictToSearch中的一个条目转换成一个符合你使用的字段名称的字典。

撰写回答