如何将 Python 字典写入 csv 文件?

我有一个我认为应该很简单的任务,但我似乎无法解决。

如何将 Python 字典写入 csv 文件?我所要做的就是把字典键写到文件的最上面一行,把键值写到第二行。

我最接近的是以下内容(我从别人的帖子中得到的) :

f = open('mycsvfile.csv','wb')
w = csv.DictWriter(f,my_dict.keys())
w.writerows(my_dict)
f.close()

问题是,上面的代码似乎只写了第一行的键,仅此而已。我没有得到写到第二行的值。

有什么想法吗?

406014 次浏览

您正在使用 DictWriter.writerows(),它需要一个字典列表,而不是一个字典。您希望 DictWriter.writerow()写一行。

如果您希望为您的 csv 文件提供一个头文件,那么您还需要使用 DictWriter.writeheader()

您可能还想检查 with声明中的 打开文件。它不仅更具 Python 性和可读性,而且为您处理关闭操作,即使在发生异常时也是如此。

例如:

import csv


my_dict = {"test": 1, "testing": 2}


with open('mycsvfile.csv', 'w') as f:  # You will need 'wb' mode in Python 2.x
w = csv.DictWriter(f, my_dict.keys())
w.writeheader()
w.writerow(my_dict)

结果是:

test,testing
1,2

你的代码是 非常接近工作。

尝试使用常规的 CSV.writer而不是 口述记录员。后者主要用于编写词典目录。

下面是一些代码,它们将每个键/值对写入一个单独的行:

import csv


somedict = dict(raymond='red', rachel='blue', matthew='green')
with open('mycsvfile.csv','wb') as f:
w = csv.writer(f)
w.writerows(somedict.items())

相反,如果你想要一行中的所有键和下一行中的所有值,这也很容易:

with open('mycsvfile.csv','wb') as f:
w = csv.writer(f)
w.writerow(somedict.keys())
w.writerow(somedict.values())

专家提示 : 在开发这样的代码时,将编写器设置为 w = csv.writer(sys.stderr),这样您就可以更容易地看到生成的代码。当逻辑完善后,切换回 w = csv.writer(f)